【问题标题】:How do I add a custom method to a backbone model?如何将自定义方法添加到主干模型?
【发布时间】:2013-08-20 15:31:29
【问题描述】:

我试过了:

initialize: function() {
    if (this.get("id") == "modelOfInterest") {

        var func = function() {
           //do some stuff with the model
         }
         _.bind(func, this)

    }
}

initialize: function() {
    if (this.get("id") == "modelOfInterest") {
          var func = function() {
            //do some stuff with the model
          }
          this.on("func", func, this);
     }
}

但是在这两种情况下:

myModelInstance.func(); //object has no method func

我不想使用_.bindAll()

我已经编辑了上面的代码以表明我正在尝试将 func 绑定到一个模型。模型在添加到集合时被初始化:所有模型同时触发初始化,我只想将 func 绑定到其中一个。

【问题讨论】:

    标签: backbone.js marionette


    【解决方案1】:

    有什么理由不做显而易见的事吗?

    Model = Backbone.Model.extend({
      func: function() {
      },
    })
    

    【讨论】:

    • 一个可能的原因是该模型用于集合中。我只想将此方法提供给其中一个模型。在初始化函数中,我正在测试模型 id 以查看它是否是我想要的,以便我可以绑定到那个。如果我按照您的建议进行操作,我会将功能提供给所有模型。
    • 这行得通。我认为这意味着我的 func 已附加到集合中的所有模型,但只要我不将任何事件绑定到它们,这并不重要。
    【解决方案2】:

    if 块中将 func 指定为模型的属性。

    var Model = Backbone.Model.extend({
      initialize:function() {
        if (this.get('id') === 1) {
          this.func = function() {
              // your logic here
          };               
          this.on('func',this.func,this);
        }
      }
    });
    

    【讨论】:

    • 即使这样也没有用,尽管它让我走上了正轨。我在初始化之外的模型中定义了函数,因此它属于模型。然后 this.on('func'... 行工作。我不知道为什么 this.func 里面的 initialize 没有将函数附加到模型。
    【解决方案3】:

    静态方法应该在 .extend 调用中的第二个字典上声明:

    SomeModel = Backbone.Model.extend({
      initialize: function(){}
    },{
      someStaticFunction: function(){
          //do something
      } 
    });
    

    http://danielarandaochoa.com/backboneexamples/blog/2013/11/13/declaring-static-methods-with-backbone-js/

    【讨论】:

      【解决方案4】:

      试试这个:

      SomeModel = Backbone.Model.extend({
        initialize: function(){},
        someFunction: function(){
            //do something
        } 
      });
      

      还有这个:

      var model = new SomeModel();
      model.someFunction();
      

      【讨论】:

        猜你喜欢
        • 2012-03-01
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2013-08-01
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多