可观察列表未从js更新回调
问题描述:
我试图从js.Callback
内更新我的模板。当我做cities.add("test")
从我的main()
它工作正常,并更新我的模板与字符串,但在回调模板没有更新。我正在尝试使用来自Parse.com的Javascript API。登录工作,并从查询中获取对象。我刚开始学习飞镖,所以也许这很明显,我失踪了?可观察列表未从js更新回调
更新:通过调用js.retain(Parse)然后调度() 下面的工作解决方案解决了问题。
myDart.html:
<template iterate="city in cities"> {{city}} </template>
myDart.dart:
import 'dart:html';
import 'package:web_ui/web_ui.dart';
import 'package:js/js.dart' as js;
var Parse = js.context.Parse;
List<String> cities = new List();
void main() {
js.retain(Parse); //Solution to problem (1/2)
Parse.initialize("id", "key");
if(Parse.User.current() == null) {
Parse.User.logIn("user", "password",
js.map({
"success": new js.Callback.once((user) => parseData()),
"error": new js.Callback.once((user,error) => print(error.message))
})
);
}
else
parseData();
cities.add("hej");
}
void parseData() {
//Get Cities
var City = Parse.Object.extend("City");
var query = new js.Proxy(Parse.Query, City);
query.equalTo(js.map({"ACL" : Parse.User.current()}));
query.find(
js.map({
"success": new js.Callback.once((array){
for (var i=0; i < array.length; i++){
String cityName = array[i].get("name");
cities.add(cityName);
dispatch(); //Solution to problem (2/2)
}
}),
"error": new js.Callback.once((object,error) => print(error.message))
})
);
}
答
好像有2个问题与您的代码:
- 你应该叫
watcher.dispatch()
在更新你的l之后通过你的回调。 - *变量
Parse
是用于回调的js.Proxy
。必须保留此代理(使用js.retain(Parse)
)以用于当前事件回放之外,否则您将收到类似的错误。js ref已失效。
你可以发布你的'getMyCity()'方法吗?无法重现这种奇怪的行为。 – MarioP 2013-05-04 15:48:37
感谢您的尝试!我用我的dart文件的完整版本更新了这篇文章。 – bullsAI 2013-05-05 09:46:31
从Parse.com的js文件中加载查询方法(在我简化后的文章中命名为geyMyCity),我将该脚本加载到我的html头部。 – bullsAI 2013-05-05 10:25:09