我已经编写了一个具有分页功能的数组控制器。
当我第一次切换到其他页面时,没有问题。
但是,如果我修改了之前访问过的页面,则会触发使用属性的观察者模板。
(在这种情况下,published
)
当我从模板中删除{{#unless published}}...{{/unless}}
时,当我再次访问我已经访问过的页面时,观察者不再被触发。
我认为我的控制器上没有做过奇怪的事情......
(点击分页按钮时,它只是更改控制器的page
)
(我在模型类中为title
编写了观察者,以测试此问题是否仅限于published
属性,title
的观察者也像published
的观察者一样。所以此问题似乎不限于published
属性)
我正在使用 Ember:1.7.1 + pre.f095a455 Ember数据:1.0.0-beta.9 把手:1.3.0 jQuery:1.11.1 我尝试了测试版和金丝雀版的ember,但这个问题仍然存在。
这是我的路线
MuteAdmin.IndexRoute = Ember.Route.extend({
model: function(params, transition, queryParams) {
var search = params.search || '';
var page = params.page || 1;
return this.store.find(this.get('articleModelClassName'), {
search: search,
page: page
});
},
setupController: function(controller, model) {
controller.set('model', model);
var will_paginate_meta = model.get("meta.will_paginate");
controller.set('totalPages', will_paginate_meta.total_pages);
controller.set('previousPage', will_paginate_meta.previous_page);
controller.set('nextPage', will_paginate_meta.next_page);
}
});
这是我的控制器
MuteAdmin.IndexController = Ember.ArrayController.extend(MuteAdmin.Modelable, {
queryParams: ['page', 'search'],
page: 1,
totalPages: null,
pageChanged: function() {
this.store.find(this.get('articleModelClassName'), {
search: this.get('search'),
page: this.get('page')
}).then(function(model) {
this.set('model', model);
var will_paginate_meta = model.get("meta.will_paginate");
this.set('totalPages', will_paginate_meta.total_pages);
this.set('previousPage', will_paginate_meta.previous_page);
this.set('nextPage', will_paginate_meta.next_page);
}.bind(this));
}.observes('page'),
actions: {
doSearch: function() {
this.store.find(this.get('articleModelClassName'), {
search: this.get('search'),
page: 1
}).then(function(model) {
this.set('model', model);
var will_paginate_meta = model.get("meta.will_paginate");
this.set('totalPages', will_paginate_meta.total_pages);
this.set('previousPage', will_paginate_meta.previous_page);
this.set('nextPage', will_paginate_meta.next_page);
this.set('page', will_paginate_meta.current_page);
}.bind(this));
}
}
});
这是我的模板
{{#each controller}}
<tr>
<td>{{link-to title "edit" this}} {{#unless published}}<small class="text-muted">비공개</small>{{/unless}}</td>
<td>{{author.name}}</td>
<td>{{category.title}}</td>
<td>시간 지정</td>
<td>{{viewCount}}</td>
</tr>
{{/each}}
这是我的模型,有观察员
MuteAdmin.Article = DS.Model.extend({
title: DS.attr( 'string' ),
body: DS.attr( 'string' ),
category: DS.belongsTo('category'),
author: DS.belongsTo('user'),
viewCount: DS.attr('number'),
published: DS.attr('boolean', { defaultValue: true }),
publishScheduled: DS.attr('boolean', { defaultValue: false }),
publishScheduleTime: DS.attr('date'),
publishedChanged: function() {
if (this.get('published') == true) {
this.set('publishScheduled', false);
}
console.log('published changed! ' + this.toString());
}.observes('published'),
});
答案 0 :(得分:1)
没关系,我知道它是什么。您为服务器调用已存在的记录。结果将合并到商店中预先存在的记录中,从而导致模型失效并使观察者触发。