2015-01-03 1 views
0

у меня есть мнение:Как обновить представление, основанное на изменении объекта в позвоночнике и марионетке?

define(['backbone', 'hbs!tmpl/test_tmpl'], 
function (Backbone, TestTmpl) { 
    'use strict'; 
    return Backbone.Marionette.ItemView.extend({ 
     initialize: function() { 
      this.projects = {}; 
     }, 
     template: TestTmpl, 
     templateHelpers: function() { 
      return { 
       projects: this.projects 
      } 
     }, 
     ui: {}, 
     events: {}, 
     onRender: function() { 
      this.projects = {title: 'a'}; 
      return this; 
     } 
    }); 
}); 

затем в представлении:

{{#each projects}}{{this.title}}{{/each}} 

в методе onRender() я обновить проект this.projects = {title: 'a'}; и когда это установлено, я хочу, чтобы данные просмотреть обновления, а также

любые идеи?

ответ

0

Попробуйте позвонить

this.render(); 

Как правило, вы будете использовать CollectionView вместо itemview.
Если вам понадобится больше HTML, окружающих элемент wrapping, вместо этого используйте составное представление.

Обратите внимание, что CollectionView принимает Backbone Collection, когда вы передаете его:

var collectionview = new CollectionView({ collection: bbCollection }); 

An itemview занимает модель:

var itemview = new ItemView({ model: bbModel}); 

Для примера, используя CollectionView устраняет необходимость в создании цикл внутри шаблона.
Вы можете получить доступ к свойствам текущего itemview, вызвав

this.model.get("property"); 

На itemview.

В вашем примере, представляется мне, что вы достаточно иметь массив вместо объекта:

var projects = [{ title: "X"}, { title: "Y" }]; 

Вы можете создать коллекцию Магистраль на лету так:

var projects_collection = new Backbone.Collection(projects); 

И передать его в подборку:

//First create a Marionette Collectionview, then: 
var projectsCollview = new ProjectsCollview({ collection: projects_collection });