2013-12-03 5 views
2

У меня есть что-то вроде этого:Как сказать метеору "наблюдать" за изменениями в массиве?

<template name ="products"> 
    <br /> 
    <h2>Products</h2> 
    <table> 
     <tr> 
      <td>Name</td> 
      <td>Price</td> 
     </tr> 
     {{#each products.items}} 
     <tr> 
      <td>{{name}}</td> 
      <td>{{price}}</td> 
     </tr> 
     {{/each}} 
     <tr> 
      <td>Total:</td><td>{{products.totalPrice}}</td> 
     </tr> 
    </table> 
</template> 


Template.products.helpers({ 
     products: function() { 
      try { 
       var user = Session.get("user"); 
       return JSON.parse(localStorage[user]); //this return* 
      } catch (e) { 

      } 
     } 
    }); 

* это возвращает что-то вроде этого {totalPrice: 30, items:[{"productId1","name1","10"},{"productId2","name2","20"}]}

Возникает вопрос: Мне нужно иметь эту информацию, хранящуюся в LocalStorage, а не в Meteor.Collection, как я не хочу перейти на сервер до момента X (не имеет значения, действительно). Но я не могу сделать это автоматически при каждом изменении значения localStorage. Есть какой-либо способ сделать это?

Заранее спасибо.

+0

По какой причине вы не используете 'Meteor.Collection (null)' для создания локальной коллекции? – user728291

+1

Где метеор хранит эту местную коллекцию? Большое спасибо –

+0

По существу дубликат [Наблюдаемый массив или в коллекции памяти в Метеор] (http://stackoverflow.com/questions/18278980/observable-array-or-in-memory-collection-in-meteor) –

ответ

4

Это то, что Dependencies для. Самый простой пример:

var array = []; 
var arrayDep = new Deps.Dependency(); 

Template.name.helper = function() { 
    arrayDep.depend(); 
    return array; 
}; 

var change = function() { 
    // do things to Array contents 
    arrayDep.changed(); 
}; 
+0

Спасибо, я попробую это через несколько часов! –

+1

Хорошо, это сработало отлично. Большое спасибо. –

1

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

Вы также можете использовать пакет browser-store, который, как представляется, делает локальный реактивный реактив.

+0

Спасибо, Я проверю это. –

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