2015-01-24 5 views
0

Я пишу приложение Todo с Backbone.jsBackbone.js. Правильно внести изменения

Вы можете увидеть часть моего кода ниже. Модель:

var Todo = Backbone.Model.extend({ 
    defaults : { 
     title: 'Task Title', 
     complete: false 
    }, 
    initialize: function(){ 
     this.on("change:complete", function() { 
      alert("foo"); 
     }); 
    } 
}); 

Вид:

var AppView = Backbone.View.extend({ 
     collection: todoCollection, 
     el: 'body', 
     events: { 
      'click #tasks li .complete-task' : 'toggleComplete' 
     } 
     toggleComplete: function (e) { 
      var modelCid = $(e.target).parent('li').attr('id'); 

      if (this.collection.get(modelCid)['complete']){ 
       this.collection.get(modelCid)['complete'] = false; 
      } else { 
       this.collection.get(modelCid)['complete'] = true; 
      }; 
     } 
    }); 

Но что-то работает неправильно и изменить событие в модели не работает. Я не могу понять, где у меня ошибки. Помогите мне, пожалуйста. 10q.

+0

Я думаю, что это должно быть 'this.on («change'', если вы не обстреливают его вручную не 'изменение:. Complete' – Scriptable

+0

' this.on (» change'' тоже не работает –

+0

Ах, я думаю, что для события изменения, которое нужно уволить, вам нужно использовать метод 'set' на модели. – Scriptable

ответ

2

В соответствии с Backbone Documentation:

Setmodel.set(attributes, [options])

Установите хэш атрибутов (один или много) на модели. Если какой-либо из атрибутов изменит состояние модели, событие «изменения» будет запущено на модели. Также активируются события изменения для , и вы можете привязать их к , например: change: title и change: content. Вы также можете передать отдельные ключи и значения.

Для этого необходимо использовать метод set, чтобы эти события были уволены. Таким образом, вы должны были бы использовать что-то вроде этого:

this.collection.get(modelCid).set('complete',false); 
Смежные вопросы