0

我有一个控制器:

            var layout = new LayoutView();
            App.holder1.show(layout);
            var my_view = new myView({id: options})
            layout.holder1.show();

            console.log(my_view.model.get('name')) <---- I want this

但是,我想get my_view.model.get('name'),问题是我得到了undefined. 我有console.log模型并且它填充正常,但是我认为这是因为当我尝试获取时它还没有完全加载。

这是我目前的thisView:

  var thisView = Backbone.Marionette.ItemView.extend({
            initialize: function (options) {
                this.model.fetch();
            },
            model: new myModel(),
            template: testExampleTemplate,
        });
        return thisView;
4

3 回答 3

2

只有在成功回调函数之后才会填充对象:

initialize: function (options) {
  this.model.fetch({
    success: function(model){
      console.log(model.get('name'));
    };
  });
}
于 2013-11-14T23:32:32.007 回答
1

有几种方法可以解决这个问题。首先,您可以在视图中从模型中侦听更改事件,并在更改事件触发时执行您需要的任何操作。如果您无论如何都需要做某事,您有两种选择:您可以为模型的 parse 方法编写一个实现,该方法会触发您的视图侦听的事件并执行某些响应,或者您可以在成功回调中执行某些操作对于 fetch 方法本身(作为 fetch 的选项传递)。如果我更好地理解哪种方法对您的情况有意义,我可以提供一个示例。

于 2013-11-14T23:49:26.103 回答
1

监听一个事件。“更改”或“重置”将起作用。

viewInstance.model.on("change", function(){
    viewInstance.model.get("nameOfAttribute");
    // do something
});

http://backbonejs.org/#Events-catalog

于 2013-11-14T22:57:33.697 回答