2014-02-12 3 views
1

Я переопределил Backbone.Model и расширил мою собственную модель с помощью метода проверки, но, похоже, это не срабатывает при обновлении моей модели с помощью набора, включая флаг validate: true.Магистральная модель не проверяет

Mod.Field.Model = App.Base.Objects.BaseModel.extend({ 
     url: "../WebServices/Myclass.asmx/GetData", 
     defaults: { 
      DisplayName: "" 
     }, 

     validate: function (attrs) { 
      if (attrs.DisplayName == "") { 
       return "DisplayName cannot be an empty string."; 
      } 
     } 
    }); 

В моей CollectionView:

item_view.model.set({ "DisplayName": event.target.value }, { silent: false, validate: true }); 

Ничто, кажется, чтобы вызвать метод проверки на модели при вызове набора. Я также пробовал это также:

item_view.model.isValid(); 

Но это также не вызывает его.

Использование Backbone версии 1.1

+0

Вы переопределить метод model.set? –

+0

Единственный метод, который я переопределил, - это синхронизация. – bretcj7

+0

Если вы проверили 'item_view.model.get (« DisplayName »)' вы получаете значение, которое вы установили? –

ответ

0

Проблема закончилась тем, что была моей коллекцией, которую я переопределил, устанавливая модель по умолчанию той, которую я фактически не использовал.

Это исправили проблему:

this.collection = new App.Base.BaseCollection(this.model.get("mydata"), { model: Mod.Field.Model }); 
0

Этот код ниже работает .... но все равно возникает вопрос, почему этот код не будет работать с перегруженной моделью?

Mod.Test = {}; 

    Mod.Test.Model = Backbone.Model.extend({ 
     url: "", 
     defaults: { 
      DisplayName: "" 
     }, 

     validate: function (attr) { 
      if (attrs.DisplayName == "") { 
       return "DisplayName cannot be an empty string."; 
      } 
     } 
    }); 

    Mod.Test.ItemView = Marionette.ItemView.extend({ 
     tagName: "div" 

    }); 

    var newView = new Mod.Test.ItemView({ 
     model: new Mod.Test.Model() 
    }); 

    newView.model.set({ "DisplayName": 123 }, { validate: true }); 
    newView.model.get("DisplayName"); 

Только что протестирован другой сценарий. Я заменил Mod.Test.Model своим переопределенным образцом кода, и он работает. Видимо, похоже, я получал представление от CompositeView для модели.

updateItem: function (event) { 
var event_target = $(event.target); 
var zero_length = event.target.value.length == 0 ? true : false; 
var item_view = this.children.findByCid(event_target.attr("data-viewcid")); 
+0

См. Выше, проблема заключается в том, как я получил модель из CompositeView для обновления модели. Что не так с findByCid – bretcj7

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