如何使对象数组成为反应数据源?

时间:2013-07-15 15:35:13

标签: javascript meteor reactive-programming meteor-helper

我有一个对象数组。说

var 
sidelist = [
    {
    name:"asdf", 
    id:1234,
    types:[...]


    }
];

使用此构造

将每个对象转换为页面上的框
Template.global.side = function(){
    var obj = [], m;
    m = 1;
    for (var i in sides){
        obj.push({
            index : m,
            object : sides[i]
        });
    }

    return obj;
}

HTML:              

        {{#each side}}
            <div class="span{{this.index}}" id={{this.object.id}}>


                    <div class="side-head">{{this.object.name}}</div> 

</template>

有一个函数可以创建新对象并将其推入数组。当它们所依赖的阵列发生变化时,如何让页面上的行反应更新?

因此,当我添加一个新对象时,应该会出现一个新框。

3 个答案:

答案 0 :(得分:4)

如果您想使用依赖项,它可能如下所示:

var sidelist = ...;
var sidelist_dep = new Deps.Dependency;

Template.global.side = function(){
    sidelist_dep.depend();
    // Do your stuff here;
    return ...;
};

// Important: call this every time you change sidelist,
// AFTER the change is made.
sidelist_dep.changed();

请参阅:http://docs.meteor.com/#deps

答案 1 :(得分:1)

在几乎所有情况下,您都应该将对象放在Meteor Collection中,而不是作为被动对象一部分的数组。这有很多原因,包括以下

  • 添加,删除,搜索和更新都会更快
  • 反应性将在元素级别而不是数组
  • 当添加或删除某些内容时,Meteor不会重新渲染整个对象集 - 只需更改
  • 您可以在集合上定义排序顺序,使其比固定序列更灵活

答案 2 :(得分:0)

看看Andrew Wilcox的隔离价值智能套装: https://atmosphere.meteor.com/package/isolate-value

README包含在存储在Session变量中的数组中添加/删除值时有选择地重新呈现相关模板的确切示例。