不会在后续加载时调用控制器方法

时间:2014-03-21 02:46:10

标签: javascript ember.js

我的路线中定义了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/edithttp://emberjs.jsbin.com/kigumezo/1

“被叫”消息仅在第一次/ test /:test_name被访问时出现。我意识到我缺少一些关于此的基本知识,但我似乎无法找到问题所在。我想每次访问不同的网址时都要刷新该属性。

2 个答案:

答案 0 :(得分:4)

{{each}}助手需要传递一个可枚举的对象(即对象列表),你不能只在一个方法上调用它。这绝对是调用控制器动作的错误方法。

{{#each}}的结束标记也应该是{{/each}},而不是{{/itemlist}}

答案 1 :(得分:1)

通过查看传递给setupController的模型类型,我解决了这个问题。在第二个调用实例中,我得到的是一个item对象而不是一个引用我的item_id的字符串。我会调查此事,但就目前而言,已关闭。

如果有人可以为此发布解释,那就太棒了。

感谢大家试图帮忙!