Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 数据绑定不使用通过JavaScript编程设置的模板_Knockout.js_Jquery Templates - Fatal编程技术网

Knockout.js 数据绑定不使用通过JavaScript编程设置的模板

Knockout.js 数据绑定不使用通过JavaScript编程设置的模板,knockout.js,jquery-templates,Knockout.js,Jquery Templates,我不熟悉敲除JS,在使用jQuery text/x-jQuery-tmpl时,我找不到数据绑定不工作的原因 使用:jQuery 1.5.2;淘汰赛1.3.0测试版 我试图将无序列表绑定到视图模型中的可观察数组,并将列表项对象上的复选框绑定到另一个具有“选中”绑定的ko.observable数组 工作模板代码为: <ul data-bind="foreach: viewModel.booksFromServer()"> <li> <input type="

我不熟悉敲除JS,在使用jQuery text/x-jQuery-tmpl时,我找不到数据绑定不工作的原因

使用:jQuery 1.5.2;淘汰赛1.3.0测试版

我试图将无序列表绑定到视图模型中的可观察数组,并将列表项对象上的复选框绑定到另一个具有“选中”绑定的ko.observable数组

工作模板代码为:

<ul data-bind="foreach: viewModel.booksFromServer()">
  <li>
    <input type="checkbox" data-bind="checked: viewModel.selectedBooks(), value: Id" />
  </li>
</ul>
你的想法是什么?事先谢谢你的帮助。
Piotr

在Knockout中使用jQuery模板时,您永远不会真正想直接调用
.tmpl
,因为它不会进行数据绑定或清理任何现有绑定

您需要使用
模板
绑定:


调用
showBookList
时,可以填充使用模板绑定绑定的observableArray,用户界面将相应更新。这样,视图模型实际上只处理数据,而不依赖于用户界面的结构(视图模型代码中没有对jQuery选择器或元素的引用)。

如果模板1起作用,为什么要让模板2发挥作用?模板1是在beta版中引入的一种新的工作方式,只是出于好奇。我想知道我是否做了一些不正确的事情,或者这只是一个错误的方法。RP Niemayer的回答:“它不会进行数据绑定或清理任何现有绑定”解决了我的疑问。感谢您的解释。我正在将淘汰框架引入一个现有的项目中,所以我认为我可以保留大块内容,并在需要时引入一些KO。
<script type=""text/x-jquery-tmpl" id="bookTemplate">
  {{each data}}
    <li> 
      <input type="checkbox" value="${Id}" data-bind="checked: selectedBooks" />
    </li>
  {{/each}}
</script>
var viewModel ={
  selectedBooks = ko.observableArray(),
  booksFromServer = ko.observableArray()
  //other properties and methods
  showBookList: function(bookList){
    $("#bookTemplate").tmpl({data: bookList}).appendTo("#book_list");
  }
}