1

内からテンプレートを更新しようとしていjs.Callbackます。私がcities.add("test")自分から行うmain()と、正常に機能し、テンプレートを文字列で更新しますが、コールバック内で同じことを行うと、テンプレートは更新されません。Parse.comの Javascript API を使用しようとしています。ログインが機能し、クエリからオブジェクトを取得することもできます。私は Dart を学び始めたばかりなので、私が見逃しているのは明らかなことでしょうか?

更新: js.retain(Parse) を呼び出してから、dispatch() を呼び出すことで問題が解決しました。以下の解決策を実行します。

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))
    })    
  );
}
4

1 に答える 1

2

あなたのコードには2つの問題があるようです:

  • watcher.dispatch()コールバックを介してリストを更新した後に呼び出す必要があり ます。
  • 最上位の変数Parsejs.Proxy、コールバックで使用される です。このプロキシは、現在のイベント ループの外部で使用するために (とともに) 保持する必要があります。そうしないと、 js ref has been invalidatedjs.retain(Parse)のようなエラーが発生します。
于 2013-05-05T12:27:54.950 に答える