我的SPA中有淘汰组件的问题,在某个页面我试图实现一个组件;通过params
属性传递的所有可观察量都按预期工作。但是当我在组件的viewmodel中创建ko.observable(), ko.computed, ..
时,它们就不能正常工作了。 (顺便说一句,我们正在使用asp.net mvc,我们需要提供cshtml文件作为模板,视图中的剃刀帮助我们提供了几种解析选项)
因此获取文件不是直接问题,奇怪的是,在cshtml文件中,我无法使用展开的text: test
,我必须编写text: test()
。计算机也没有更新,似乎什么也没做。
我认为我缺少的是组件永远不会通过ko.applyBindings()添加,但这纯粹是猜测。请问有人对此有所了解吗?
如何在页面加载后添加挖空组件。是的,我一直在四处寻找,整天都在摆弄,但却无济于事。提前谢谢。
这是在我们的主页上。
<track-item-list params="value: data, selected: selectedItems"></track-item-list>
在脚本标记内:
if (!ko.components.isRegistered('track-item-list')) {
ko.components.register('track-item-list', { require: '@Url.Content("~/Scripts/viewmodels/items/_cItemList.js")' });
}
有一个viewmodel js文件:
define(['knockout', 'cshtml!/items/_cItemList'], function (ko, cshtmlString) {
function ItemViewModel(params) {
var self = this;
self.selected = params.selected;
self.test = ko.observable('Hello World!');
}
return { viewModel: ItemViewModel, template: cshtmlString };
});
cshtml模板:
<span data-bind="text: selected().length"></span>
<ul data-bind="foreach: selected">
<li data-bind="text: Total"></li>
</ul>
<span data-bind="text: test"></span>
cshtml文件通过自定义脚本加载:
define(['jquery'], function($) {
var buildText = {};
return {
load: function (name, req, onLoad, config) {
var self = this,
file = name,
segments = file.split('/');
// If the module name does not have an extension, append the default one
if (segments[segments.length - 1].lastIndexOf('.') == -1) {
file += '.cshtml';
}
$.get(name, function (html, status, xhr) {
console.log('html loaded: ' + name);
onLoad(html);
});
}
};
});