2013-08-20 4 views
4

Я пробовал:Как добавить настраиваемый метод к базовой модели?

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 с одним из них.

ответ

13

какой-либо причине не сделать очевидное?

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

Одной из возможных причин является то, что эта модель используется в коллекции. Я только хочу дать этот метод одной из моделей. В функции инициализации я тестирую идентификатор модели, чтобы увидеть, является ли она той, которую я хочу, чтобы я мог привязываться только к ней. Если бы я сделал то, что вы предлагаете, я бы дал функцию всем моделям. –

+0

Я отредактировал свой оригинальный вопрос, чтобы сделать это яснее. –

+0

Это работает. Я думаю, это означает, что моя функция привязана ко всем моделям в коллекции, но это не имеет значения, пока я не привязываю к ним какое-либо событие. –

0

Попробуйте это:

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

И это:

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

Присвоить func как свойство модели в вашем if блоке.

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

@muistooshort, хорошая точка. Я отредактировал свой ответ, спасибо. – fbynite

+0

Даже это не сработало, хотя оно поставило меня на правильный путь. Я определяю функцию в модели вне инициализации, поэтому она принадлежит модели. Тогда this.on («func» ... работает. Я не знаю, почему this.func внутри инициализации не привязывает эту функцию к модели. –

Смежные вопросы