【问题标题】:Ember How fire observes when create object(observe was set already in model)Ember 创建对象时如何观察火(观察已在模型中设置)
【发布时间】:2013-07-18 22:33:12
【问题描述】:

在控制器数组中创建对象时,我无法触发观察函数

我的代码:

型号

App.Meeting = Em.Object.extend({
    id: null,
    name: null,
    type: null,
    proposes: null
 });
App.Meeting.reopen({
    proposedChanged: function() {
       //some do
    }.observes('proposes')
});

控制器

App.meetingsController = Ember.ArrayController.create({
    content: [],
    loadList: function(){
        var me = this;
        $.getJSON(url,function(data){

            if(data.status == 0){
                $(data.meetings).each(function(index,value){
                    var m = App.Meeting.create(value)
                    me.pushObject(m);    
                });

            }else{
                alert('Error loading content');
            }               
        });
    },

});

App.meetingsController.loadList();

当我运行应用程序时,控制器已获取 JSON 数据并使用该数据创建 App.Meeting,但观察者未触发

【问题讨论】:

    标签: ember.js observers


    【解决方案1】:

    虽然我正在创建一个 jsbin 来与 @Darshan Sawardekar 一起玩,但它是正确的,所以现在你必须找到答案才能玩 :)

    重要代码:

    App.meetingsController = Ember.ArrayController.create({
      content: [],
      loadList: function(){
        var me = this;
        $.getJSON(url, function(data){
          if(data.status == 0){
            $(data.meetings).each(function(index, value){
              var m = App.Meeting.create();
              m.set('id', value.id);
              m.set('name', value.name);
              m.set('type', value.type);
              m.set('proposes', value.proposes);
    
              me.pushObject(m);
            });
          } else {
             alert('Error loading content');
          }               
        });
      }
    });
    

    希望对你有帮助。

    编辑

    请参阅此处以查看显示该概念的有效jsbin

    【讨论】:

    • 也请我上船!
    • @ST_5 查看我的编辑,我添加了一个 jsbin,其中仅使用了 .set(...) 并且它正在工作,看看
    • 哦,对不起@ntuitivepixel,你的方法是正确的。谢谢 PS:起初我在创建模型时丢失了删除值(我的意思是那个地方 var m = App.Meeting.create(value); - 它不正确)。再次感谢。
    【解决方案2】:

    我认为当你做meeting.set('proposes', 'value') 时,观察者会发火。他们不会在create 通话中开火。您可以修改您的创建以修饰建议。这可能有效,

    var m = App.Meeting.create(value);
    m.set('proposes', value.proposes);
    

    【讨论】:

    • 直截了当,这值得一票:) 但忍不住也发布了一个答案:)
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多