Ember模板没有从arraycontroller更新 [英] Ember template not updating from arraycontroller
问题描述
在我的应用中,用户可以输入朋友的描述,或者提醒已经存在的描述。数据库中都存在两种方法(createDescription和upvoteDescription)。 upvoteDescription更改DOM,但createDescription不会。这可能是因为我在模型中传递了一个参数,但是我无法解决 - api需要它。
In my app, a user can enter a description of a friend or upvote a description that is already present. Both methods (createDescription and upvoteDescription) persist in the database. upvoteDescription changes the DOM, but createDescription does not. It may be because I'm passing a parameter in the model, but I can't get around that -- the api needs it.
//descriptions route
App.DescriptionsRoute = Ember.Route.extend({
...
model: function () {
var store = this.get('store'),
friend = this.modelFor('friend');
return store.find('description', {friend_id: friend.id});
}
})
//descriptions controller
App.DescriptionsController = Ember.ArrayController.extend({
...
actions: {
createDescription: function () {
var name = this.get('name'),
friend_id = this.get('controllers.friend').get('id'),
store = this.get('store'),
description = store.createRecord('description', {
name: name,
friend_id: friend_id
});
description.save();
},
upvoteDescription: function (description) {
var count = description.get('count');
description.set('count', count + 1);
description.save();
}
}
});
//descriptions template
{{input value=name action="createDescription" type="text"}}
{{#each controller}}
<div {{bind-attr data-name=name data-count=count }} {{action upvoteDescription this}}>
<div>{{name}}</div>
<span>{{count}}</span>
</div>
{{/each}}
推荐答案
(通过查询)不会主动确保它具有与查询匹配的记录,因此您必须手动将其注入到结果中。
find (by query) doesn't actively make sure it has the records that match the query, so you'll have to manually inject it into the results.
createDescription: function () {
var name = this.get('name'),
friend_id = this.get('controllers.friend').get('id'),
store = this.get('store'),
description = store.createRecord('description', {
name: name,
friend_id: friend_id
});
description.save();
this.pushObject(description);
},
或者可以使用实时记录数组(过滤器
/ 全部
)
or you can use a live record array (filter
/all
)
model: function () {
var store = this.get('store'),
friend = this.modelFor('friend');
store.find('description', {friend_id: friend.id});
return store.filter('description', function(record){
return record.get('friend_id') == friend.id;
});
}
这篇关于Ember模板没有从arraycontroller更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!