2013-06-26 2 views
0

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

Эти данные могут выглядеть примерно так:

var data = 
[ 
    { 
     baz: 'baz' 
    } 
] 

Что я тогда хочу быть в состоянии сделать что-то вроде этого:

var dataCollection = new Backbone.Collection(data); 
dataCollection.first().set('baz', 'new value'); 

data[0].baz //==> 'new value' 

Теперь, что немного более интересным является то, что если я сделайте это:

dataCollection.add({ baz: 'a whole new baz' }); 

data //==> 

[ 
    { 
     baz: 'baz' 
    }, 
    { 
     baz: 'a whole new baz' 
    } 
] 

В принципе, я хочу, чтобы bootstrap модель/коллекция Backbone с собственным объектом/array и любые изменения в объекте Backbone, отраженные на аналоге.

  1. Есть ли способ сделать это с помощью родной магистрали?
  2. Есть ли что-то принципиально ошибочное с этой идеей или Backbone Функциональность, которая сломается по любой причине?
  3. Есть ли библиотеки, которые сделают это уже существующим?
+0

Магистраль не изменит значение вашей исходной переменной данных, если это то, о чем вы просите. Если вы вручную не измените значение данных: 'data = myModel.toJSON();'. – idbehold

+0

Вы используете базовую станцию ​​на стороне сервера? – HighCat

+0

@HighCat Да, я запускаю его на узле. –

ответ

0

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

Что касается фактического отражения изменений в базовой модели/коллекции с хранилищем данных, вы можете просто прослушать события изменения модели/коллекции (при условии, что она будет работать даже).

this.listenTo(this.model,'change',this.updateDataStore); 

updateDataStore: function(model) { 
    //access model.changed to reflect just the changed attributes to your datastore 
} 

http://backbonejs.org/#Model-changed

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

Если вы хотите, чтобы модель сохраняла изменения в вашем хранилище данных в памяти, вы можете просто переопределить Backbone.sync, чтобы не отправлять XHR, но просто измените свой хранилище данных. Приятная вещь здесь, если вы реализуете ее для всех различных действий с помощью http, вы также сможете ее получить.

Теперь все, что вам нужно - это событие на модели, если оно смотрит change на себя, которое затем называет this.save: this.listenTo(this,'change',this.save);.

Сообщите, если это то, что вам нужно.

+0

Магистраль определенно работает на узле. Кроме того, возможно, мой вопрос был неясен, нужно было просто использовать собственный объект Backbone (или изменить базовые прототипы, как при создании библиотеки Backbone, чтобы сделать это), в отличие от жесткой проводки вручную с помощью событий, что, естественно, очень легко сделать. –

+0

См. Мое редактирование для некоторых способов сделать это. – damienc88