数据绑定不适用于通过 JavaScript 以编程方式设置的模板

发布于 2024-12-13 09:22:26 字数 1038 浏览 2 评论 0原文

我是 KnockOut JS 的新手,我找不到使用 jQuery text/x-jquery-tmpl 时数据绑定不起作用的原因。

使用:jQuery 1.5.2; knockout 1.3.0 beta

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

工作模板代码是:

<ul data-bind="foreach: viewModel.booksFromServer()">
  <li>
    <input type="checkbox" data-bind="checked: viewModel.selectedBooks(), value: Id" />
  </li>
</ul>

这不起作用,即显示列表但所选值不存储在数组中:

<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");
  }
}

你的想法是什么?预先感谢您的帮助。 皮奥特尔

I am new to KnockOut JS and I cannot find the reason for data-bind not working in when using jQuery text/x-jquery-tmpl.

Using: jQuery 1.5.2; knockout 1.3.0 beta

I am trying to bind an unordered list to observable array in the view model and bind the checkboxes on list item objects to another ko.observble array with 'checked' binding.

The working template code is:

<ul data-bind="foreach: viewModel.booksFromServer()">
  <li>
    <input type="checkbox" data-bind="checked: viewModel.selectedBooks(), value: Id" />
  </li>
</ul>

This does not work, i.e. list is displayed but selected values are not stored in the array:

<script type=""text/x-jquery-tmpl" id="bookTemplate">
  {{each data}}
    <li> 
      <input type="checkbox" value="${Id}" data-bind="checked: selectedBooks" />
    </li>
  {{/each}}
</script>

In the view model I have:

var viewModel ={
  selectedBooks = ko.observableArray(),
  booksFromServer = ko.observableArray()
  //other properties and methods
  showBookList: function(bookList){
    $("#bookTemplate").tmpl({data: bookList}).appendTo("#book_list");
  }
}

What are your thoughts? Thank you in advance for help.
Piotr

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

二手情话 2024-12-20 09:22:26

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

您需要使用 template 绑定: http://knockoutjs.com /documentation/template-binding.html

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

When using jQuery templates in Knockout, you will never really want to call .tmpl directly, as it will not do data-binding or clean up any existing bindings.

You would want to use the template binding: http://knockoutjs.com/documentation/template-binding.html.

When you call showBookList you can populate an observableArray that is bound using the template binding and your UI will update accordingly. This way your view model is really only ever dealing with data and doesn't depend on the structure of your UI (no references to jQuery selectors or elements in the view model code).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文