2012-02-01 3 views
0

Я пытаюсь добавить новый виртуальное поле к моей магистральной модели всякий раз, когда добавляется новый элемент, код прост:Магистральная модель Поля

window.DealModel = Backbone.Model.extend({ 
    defaults: { 
     title: '', 
     desc: '', 
     location: '', 
     terms: '', 
     price_orignial: 0, 
     price_discounted: 0 
    } 
}); 

window.DealCollection = Backbone.Collection.extend({ 
    model: DealModel, 

    initialize: function (models, options) { 
     this.bind('add', this.addTitleShort); 
    }, 

    addTitleShort: function(rdeal){ 
     rdeal.set('title_short', _.str.prune(rdeal.get('title') , 140, '+++')); 
    } 

}); 

Однако я продолжаю получать _ Cannot use 'in' operator to search for 'id' in title_short_, не конечно, в чем проблема, оцените помощь.

ответ

0

Я думаю, что «set» использует объект хэша:

rdeal.set({ title_short: _.str.prune(rdeal.get('title') , 140, '+++') }); 

Но если бы не было никакой собственности «title_short» в созданной модели, я не знаю, если вы можете «установить» его. Вы можете просто сделать

rdeal.title_short = _.str.prune(rdeal.get('title') , 140, '+++'); 

Также вы можете добавить функцию в модели класса, который будет возвращать результат, таким образом устраняя необходимость обработки модели «change» событие:

window.DealModel = Backbone.Model.extend({ 
    ... 
    title_short: function() { 
     return _.str.prune(this.get('title') , 140, '+++'); 
    } 
}); 

и использовать его: myModelInstance.title_short();

Надеюсь, это помогло.

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