我的路线中定义了2个页面 -
/** router.js **/
Router.map(function() {
this.route('index', {path: ''});
this.route('item', {path: 'item/:item_id'});
});
每个页面都有一个名为“itemlist”的方法
/** controllers/index.js **/
var IndexController = Ember.Controller.extend({
itemlist: function () {
console.log('indexcontroller - itemlist');
var ref = this;
$.getJSON('/api', function (data) {
ref.set('items', data);
});
return [];
}.property('items')
});
/** controllers/item.js **/
var ItemController = Ember.Controller.extend({
itemlist: function () {
console.log('itemcontroller - itemlist');
var ref = this;
$.getJSON('/api', function (data) {
ref.set('items', data);
});
return [];
}.property('items')
});
我的模板index.hbs和item.hbs都调用方法如下:
{{#each item in itemlist}}
...
{{/each}}
我可以看到日志消息在第一次加载时打印在我的控制台上 - 当我第一次导航到'/'并且当我第一次导航到'/ event / xxxx'时。当我重复这些动作时,不会再次调用这些方法。这可能是我的浏览器的缓存问题,还是有办法在路由更改之前刷新我的属性?
编辑 -
我设法用这个jsbin重复它 - http://emberjs.jsbin.com/kigumezo/1/edit(http://emberjs.jsbin.com/kigumezo/1)
“被叫”消息仅在第一次/ test /:test_name被访问时出现。我意识到我缺少一些关于此的基本知识,但我似乎无法找到问题所在。我想每次访问不同的网址时都要刷新该属性。
答案 0 :(得分:4)
{{each}}
助手需要传递一个可枚举的对象(即对象列表),你不能只在一个方法上调用它。这绝对是调用控制器动作的错误方法。
{{#each}}
的结束标记也应该是{{/each}}
,而不是{{/itemlist}}
答案 1 :(得分:1)
通过查看传递给setupController的模型类型,我解决了这个问题。在第二个调用实例中,我得到的是一个item对象而不是一个引用我的item_id的字符串。我会调查此事,但就目前而言,已关闭。
如果有人可以为此发布解释,那就太棒了。
感谢大家试图帮忙!