Cha*_*lie 256 ajax html5 knockout.js
我正在使用KnockoutJS并拥有主视图和视图模型.我想要一个对话框(jQuery UI one)弹出另一个视图,该视图要绑定一个单独的子视图模型.
使用AJAX检索对话框内容的HTML,所以我希望能够ko.applyBindings
在请求完成后调用,并且我想将子视图模型绑定到通过对话框div中的ajax加载的HTML部分.
这实际上是可行的还是我需要在页面最初加载然后调用ko.applyBindings
一次时加载我的所有视图和查看模型?
RP *_*yer 430
ko.applyBindings
接受第二个参数,该参数是用作根的DOM元素.
这可以让你做类似的事情:
<div id="one">
<input data-bind="value: name" />
</div>
<div id="two">
<input data-bind="value: name" />
</div>
<script type="text/javascript">
var viewModelA = {
name: ko.observable("Bob")
};
var viewModelB = {
name: ko.observable("Ted")
};
ko.applyBindings(viewModelA, document.getElementById("one"));
ko.applyBindings(viewModelB, document.getElementById("two"));
</script>
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用此技术将viewModel绑定到加载到对话框中的动态内容.总的来说,您只需要注意不要applyBindings
在相同的元素上多次调用,因为您将获得多个事件处理程序.
mhu*_*mhu 61
虽然Niemeyer的答案是对问题更正确的答案,但您也可以执行以下操作:
<div>
<input data-bind="value: VMA.name" />
</div>
<div>
<input data-bind="value: VMB.name" />
</div>
<script type="text/javascript">
var viewModels = {
VMA: {name: ko.observable("Bob")},
VMB: {name: ko.observable("Ted")}
};
ko.applyBindings(viewModels);
</script>
Run Code Online (Sandbox Code Playgroud)
这意味着您不必指定DOM元素,甚至可以将多个模型绑定到同一个元素,如下所示:
<div>
<input data-bind="value: VMA.name() + ' and ' + VMB.name()" />
</div>
Run Code Online (Sandbox Code Playgroud)
我已经设法在运行时将自定义模型绑定到元素.代码在这里:http://jsfiddle.net/ZiglioNZ/tzD4T/457/
有趣的是,我将data-bind属性应用于我没有定义的元素:
var handle = slider.slider().find(".ui-slider-handle").first();
$(handle).attr("data-bind", "tooltip: viewModel.value");
ko.applyBindings(viewModel.value, $(handle)[0]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
115606 次 |
最近记录: |