动态加载挖空组件

时间:2015-11-11 14:52:34

标签: knockout.js

这是我的HTML:

A <- c(4,2,1)
key <- A[2]
i <- 2-1
(i > 0) & (A[i] < key)

[1] FALSE

这是我的js:

<a href="#page1">page 1</a>
<a href="#page2">page 2</a>

但是,当散列更改时,组件不会加载,而且正文内容只是:  define(['jquery', 'knockout'], function ($, ko) { ko.components.register('page1', { require: 'App/Controllers/page1' }); ko.components.register('page2', { require: 'App/Controllers/page2' }); window.onhashchange = function () { var hash = location.hash.replace('#', ''); $('#body').html('<' + hash + '></' + hash + '>'); //hash = page1 or page2 } ko.applyBindings(); }) 或第二页。如果我会像这样改变我的js:

<page1></page1>

工作正常

1 个答案:

答案 0 :(得分:5)

更换正文html会使所有内容都不受限制。你不应该使用cleanNode;它是一种kludge。

如果要更改正在使用的组件,请使用包含标记的component bindingbody没问题),使用包含所需组件的observable。这是一个例子,使用计时器来更改模板。

&#13;
&#13;
ko.components.register('page1', {
    template:'page1 template'
});
ko.components.register('page2', {
    template:'page2 template'
});
 
vm = {page:ko.observable('page1')};
ko.applyBindings(vm);

setTimeout(function () {
    vm.page('page2');
}, 1500);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="component: page"></div>
&#13;
&#13;
&#13;