knockout.js 模态控件上KO.js的数据绑定问题

ohfgkhjo  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(172)

嗨,伙计们,我正在寻找一些关于这个数据绑定问题的帮助,我有与knockoutjs。
这一切都是从ko.applyBindings(viewModel)在一个页面上向我抛出一个错误开始的,而不是其他人说在同一个元素上调用多个绑定。
通过查看文档,我很快用ko.applyBindings(viewModel, document.getElementById('ElementId'))代码修复了这个问题。
但是另一个问题出现了。我失去了编辑控件的绑定。换句话说,当我点击编辑文本时,我得到了一个空白的对话框,而不是一个充满对象属性的对话框。
原始源代码-https://dnnboards.codeplex.com/
原始现场演示-http://demo.dnnboards.com/
我能看到的唯一区别是knockoutjs版本。原始演示使用2.1.0,而我使用3.1.0,但无论我是否将整个演示html代码 Package 在一个div <body> <div id="myModule">...</div> <scripts> </body>
并且变更了
ko.applyBindings(vm);

ko.applyBindings(vm, document.getElementById('myModule'));
一切仍按预期工作。
我不能在jsfiddle工作,但你应该能够得到一个更好的想法,我是关于什么。
http://jsfiddle.net/iiminov/88rafcfk/
如果有人有一个好的建议,如何去调试这一点,我会非常感谢它。
但我怀疑
<div id="divModal" style="display:none;"> <!-- ko with: selectedCard -->
无法正常工作。因为
<!-- ko if: showAddCard --> <a href="#" class="hlCompose" data-bind="click: $root.expandCompose">Add a card</a>
在每个列表上显示“添加卡片”链接。

更新1:

感谢@PW Kad,jsfidle的问题得到了解决,但这不是我最初想解决的问题。
正如我试图指出的,在将scope添加到ko.applyBindings()后,我丢失了对话框上的数据绑定,但能够解决multiple bindings on the same element的错误。x1c 0d1x
Jsfiddles的目的是证明我不应该有任何问题,但我很难弄清楚为什么会这样。
然而,我提出了几点意见:

  • 淘汰赛版本差异(演示版2.1.0与我的开发版3.1.0)
  • 我不知道足够的淘汰赛排除这一个,因为jsfiddle仍然工作正常,即使我把淘汰赛版本提高到3.0.0(最新可用)。
  • 我不明白数据绑定最初是如何在对话框上工作的?
  • 我理解self.selectedCard = ko.observable();声明
  • 而且我理解self.selectedCard(cardToEdit);声明
  • 但根据文档<p data-bind="with: coords">
  • 我不应该有类似<div id="divModal" style="display: none;" data-bind="with: selectedCard">的东西吗(顺便说一句,这对我不起作用)
  • 同样的原则也适用于add a card链接/按钮。
  • 我没有看到任何与with关键字的绑定。
  • 然而,在最初的演示中,这个链接只出现在To Do列表中,而在我的例子中,它出现在所有列表中。

更新1.1

用关键字with来擦除数据绑定位。我找到了Note 1: Using “with” without a container element,它与我在html中看到的内容相对应。这让我相信,在javascript中的某个地方并不是一切都好。<!-- ko with: outboundFlight --> ... <!-- /ko -->

更新1.2

划掉add a card链接问题。原来我的列表项返回时的SortOrder = 0,这导致链接显示在每个列表上。

更新1.3

好吧,谁会想到,通过修复SortOrder值的问题,它不仅导致add a card链接/按钮显示在每个列表上,它还修复了对话框上的数据绑定问题。

t2a7ltrp

t2a7ltrp1#

您的小提琴在诊断问题方面表现出色-http://jsfiddle.net/88rafcfk/1/-有一个更新的问题。
看起来您的代码运行良好,除了我做了一个更改-您使用了document.GetElementById而不是document.getElementById
当我改变这个的时候,一切都很好。

相关问题