2013-05-04 32 views
1

我试图从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)) 
    })  
); 
} 
+0

你可以发布你的'getMyCity()'方法吗?无法重现这种奇怪的行为。 – MarioP 2013-05-04 15:48:37

+0

感谢您的尝试!我用我的dart文件的完整版本更新了这篇文章。 – bullsAI 2013-05-05 09:46:31

+0

从Parse.com的js文件中加载查询方法(在我简化后的文章中命名为geyMyCity),我将该脚本加载到我的html头部。 – bullsAI 2013-05-05 10:25:09

回答

2

好像有2个问题与您的代码:

  • 你应该叫watcher.dispatch()在更新你的l之后通过你的回调。
  • 顶级变量Parse是用于回调的js.Proxy。必须保留此代理(使用js.retain(Parse))以用于当前事件回放之外,否则您将收到类似的错误。js ref已失效
+0

不应该是'cities = toObservable(new List())'?而且,没有它,它就可以正常工作。那也是我的第一个想法,所以我查了一下。 – MarioP 2013-05-05 12:33:14

+0

我认为'城市= toObservable(新列表())'应该工作,但它没有。这是一个错误吗?看起来像。 – 2013-05-05 13:47:58

+0

非常感谢!保留然后调度解决了这个问题。 – bullsAI 2013-05-05 17:25:51