如何告诉meteor“观察”阵列中的变化?

时间:2013-12-03 04:47:50

标签: meteor

我有这样的事情:

<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值时,我都无法自动更新此内容。有没有办法做到这一点?

提前致谢。

2 个答案:

答案 0 :(得分: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();
};

答案 1 :(得分:1)

将信息存储在Session中,因为它是被动的,因此每次会话中的值发生变化时,您的模板都会更改。

您还可以使用似乎使localstorage成为反应的browser-store包。