修复代码套接字io和knockout

时间:2016-12-28 02:55:39

标签: knockout.js data-binding socket.io

我通过Socket从Mongodb获取数据并发送给客户端, 我使用knockout绑定,但错误不能多次应用绑定。 你能帮我修理一下代码吗?

代码:

socket.on('data', function(data) {
  function getdata() {
    var stock = [];
    for (var i = 0; i < data.length; i++) {
      stock.push(data[i]);

    }
    return stock;
  }

  var results = getdata();
  var ViewModel = {
    stocks: ko.observableArray(results)
  };

  $(function() {
    ko.applyBindings(ViewModel, $("#stock").get(0));
  });
});

1 个答案:

答案 0 :(得分:1)

分离创建更新您的视图模型。

你还没有提供真正的复制品,但在你的背景下,它会沿着这些方向发展:

var ViewModel = {
  stocks: ko.observableArray([])
};

$(function() {
  ko.applyBindings(ViewModel, $("#stock").get(0));
});

socket.on('data', function(data) {
  function getdata() {
    var stock = [];
    for (var i = 0; i < data.length; i++) {
      stock.push(data[i]);

    }
    return stock;
  }

  var results = getdata();

  ViewModel.stocks(results);
});

stocks作为带有1个参数的函数调用设置其值。如果要更新它,还可以将一个或多个项目推送到视图模型属性。检查the docs以获取有关所有可观察数组方法的信息。

PS。最有可能的是,你可以简化为这样的事情:

var ViewModel = {
  stocks: ko.observableArray([])
};

$(function() {
  ko.applyBindings(ViewModel, $("#stock").get(0));
});

socket.on('data', function(data) {
    for (var i = 0; i < data.length; i++) {
      ViewModel.stocks.push(data[i]);
    }
  }
});