嗨,伙计们,我正在寻找一些关于这个数据绑定问题的帮助,我有与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
链接/按钮显示在每个列表上,它还修复了对话框上的数据绑定问题。
1条答案
按热度按时间t2a7ltrp1#
您的小提琴在诊断问题方面表现出色-http://jsfiddle.net/88rafcfk/1/-有一个更新的问题。
看起来您的代码运行良好,除了我做了一个更改-您使用了
document.GetElementById
而不是document.getElementById
。当我改变这个的时候,一切都很好。