Meteor双向绑定 - UI更新

时间:2015-12-03 08:12:38

标签: javascript jquery node.js meteor 2-way-object-databinding

我的页面基本上是div元素的行。我从数组创建这些div元素。数组中的每个对象都是一个具有密钥用户名的映射。这是

的一个例子
{{#each rows}}
      <div class="col-md-1 poolbox">{{this.username}}</div>
{{/each}}    

当页面加载时,它会成功获取this.username的值。我在该div上有一个click事件,所以当它被点击时,我在mongo中创建一个文档,并且还想将map中的值更新为新值。

'click .divbox': function(e, t) {
    //alert("You Clicked " + JSON.stringify(this));
  Box.insert({
    username: 'NEW VALUE',        
    createdAt: new Date()
  });

一旦将其推送到数据库,我想将地图中用户名的值更新为新值,该值应该有效地更改UI中的值。我试过这样做。用户名=&#34;新值&#34 ;;在我把它推到DB之后但是没有用。

最终我想做pub / sub,以便它始终从数据库中提取。

1 个答案:

答案 0 :(得分:0)

您实际上可以更改值,只需在行数组中添加一个帮助器,并检查用户名是否已更改。

实施例

<强> JS

Template.home.helpers({
  rows : function(){
    var rows = [{username :'abc'},{username :'abd'},{username :'ab'}];
    _.each(rows,function(value,key) {
      if(Box.find({old_username : value.username}).count() > 0){
        rows[key].username = Box.find({old_username : value.username}).fetch()[0].username;            
      }
    })       
    return rows;
  }
})



Template.home.events({
 'click .poolbox': function(e, t) {
    var current_username = 'NEW VALUE';
    Box.insert({
      username: current_username,        
      old_username : $(e.currentTarget).text(),
      createdAt: new Date()
    });
  }
})

并在你的HTML中

{{#each rows}}
  <div class="col-md-1 poolbox">{{username}}</div>
{{/each}}