2013-05-04 26 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