2016-09-28 3 views
0

У меня возникает проблема при установке значения для модели.Атрибуты магистральной модели не являются обязательным значением для просмотра, когда тихий является истинным

Вот мой код:

SuperModel = Backbone.Model.extend({ 

    initialize: function() { 
     //some code...... 
    } 
}); 

ChildModel = SuperModel.extend({ 

    initialize: function() { 

     //some code.......... 
     SuperModel.prototype.initialize.call(this, arguments); 
    } 
}); 

В какой-то части моего зрения, я пытаюсь установить значение модели (например, из childModel) с { silent : true }.

Модель связана с изображением, используя ModelBinder.

this.model.set('firstName','tom',{silent:true}); // Not Working 
this.model.set('firstName','tom'); // Working 
this.model.set('firstName','tom',{silent:true}).trigger('change'); // Not Working 

Когда я удалить SuperModel.prototype.initialize.call(this,arguments);, silent:true работает (значение начала установки для пользовательского интерфейса).

Здесь я могу увидеть значение в моей модели, но не отражает мой пользовательский интерфейс.

+0

Можете ли вы предоставить больше информации, поскольку этого недостаточно. –

ответ

0

Я обнаружил, что проблема была в родительской модели SuperModel я имел строку кода, которая

this.set('editedElements', someValue); 

Я не знаю истинную причину, почему значение не отражает на пользовательском интерфейсе, когда я проходит { silent: true } как вариант, но позже, когда я удалил код this.set(...), он начал работать.

Я изменил его, как следующие

this.set('editedAttributes'),...) -> this.attributes['editeAttributes'] = ... 

Теперь эти модели значений, где я проходил мимо { silent: true } размышляет над UI.

+0

Вы можете принять ваш собственный ответ! –

+0

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

+0

В моем случае я решил не идти с множеством, но получить доступ к нему прямо из объекта атрибутов. – user3247425

2

Во-первых, если вы собираетесь передать arguments своей родительской функции initialize, вам нужно использовать apply и не call.

SuperModel.prototype.initialize.apply(this, arguments); 

Затем, если вы проходите { silent: true }, the Backbone's events не срабатывают. Если вы хотите, чтобы имитировать события позже, вы должны правильно смоделировать их:

var options = { silent: true }, 
    value = 'tom'; 

this.model.set('firstName', value, options); 
this.model.trigger('change:firstName', this.model, value, options) 
      .trigger('change', this.model, options); 

Но что поражения цели варианта silent.