希望你能帮助我!
我的Ember应用程序(Ember 1.5.1)有两个型号(Ember Data beta7):项目和标签。物品有很多标签。
我还在标签上有一个不会更新的计算属性。计算属性是一个简单的检查,以查看是否有任何标记(即非空)。我尝试过各种各样的事情。我得到了arrayComputed,然后停了下来。检查异步相关模型的计数是否大于0应该是相当简单的!我已尝试过#34;标签。[]","标签。@ each","标签。@ each.status","标签。@ each.isLoaded"," tags.length"和其他各种事情。
belongsTo上的计算属性工作正常。
App.Item = DS.Model.extend({
tags: DS.hasMany("tag", inverse: "item", async: true),
hasTags: function() {
return !Em.isEmpty(this.get("tags"));
}.property("tags")
});
App.Tag = DS.Model.extend(
item: DS.belongsTo("item", inverse: "tags"),
hasItem: function() {
return !Em.isEmpty(this.get('))
}.property("item")
);
如果我把它改成这样读,那么日志会在其中打印一行,所以承诺实际上是在履行和加载。我只是不知道在计算属性上放什么,以便在履行承诺时重新加载。我觉得我错过了一些非常明显的东西:
App.Item = DS.Model.extend({
tags: DS.hasMany("tag", inverse: "item", async: true),
hasTags: function() {
this.get("tags").then(function(tags) {
console.log("The tags are loding if this is printed");
});
return !Em.isEmpty(this.get("tags"));
}.property("tags")
});
[edit] 2014年5月7日
好吧所以我没有完全正确地解释这个问题,我猜是因为我没有完全理解错误的原因......我在下面的堆栈溢出中继续问题问题:Route's Model Hook with Ember Data "filter" not loading dependent computed property
答案 0 :(得分:0)
好的,希望有人能得到比这更好的答案,但这就是我如何得到它的方式"现在,在我的路线中(我觉得这是一种绝对荒谬的方式),通过调整依赖于" hasTags"而不是调整hasTags本身。
注意我甚至不确定我是否已经修好了#34; " hasTags" in Item是否会触发下面的过滤参考更新......?
我想也许我们需要过滤器在其块中具有承诺感知(即,您可以使用属性来过滤承诺,并且它会做正确的事情):
App.TaggedItemsListRoute = App.ItemsRoute.extend({
model: function() {
var store = this.get("store");
var storePromise = store.find("item", { has_tags: true });
var filtered = store.filter("item", function(item) {
var tags = item.get("tags");
if tags.get("isFulfilled") {
return item.get("hasTags");
} else {
return tags.then(function() {
return item.get("hasTags");
});
}
});
return storePromise.then(function(response) {
return filtered;
});
}
});
答案 1 :(得分:0)
我相信你要找的是:
App.Item = DS.Model.extend({
tags: DS.hasMany("tag", inverse: "item", async: true),
hasTags: function() {
this.get("tags").then(function(tags) {
console.log("The tags are loding if this is printed");
});
return !Em.isEmpty(this.get("tags"));
}.property("tags.@each")
});
由于tags是一个数组,因此您希望在添加或删除标记时收到通知。当发生这种情况时,'。@ each'会更新。