编辑:-我已经在github上传了项目的完整代码。
以下是我的视图模型:
define(["ko",
"service/dataService",
'service/logger',
'durandal/system'],
function (ko, svc, logger, system) {
var that = this,
results = ko.observableArray(),
query = ko.observable();
var SearchProduct = {
activate: activate,
title: 'Search',
search: search,
results: results,
query: query
};
return SearchProduct;
function activate() {}
function search() {
svc.searchProduct(query()).then(function (data) {
results([]);results(data);
}).fail(function (jqXHR, textStatus) {
var msg = 'Error searching item: ' + textStatus;
logger.logError(msg, jqXHR, system.getModuleId(svc), true);
});;
}
});
- 首先是在
search
函数中,当我调用时query()
,它返回未定义。 results
其次,当我使用以下行搜索并添加新项目时:results(data);//数据是 10 项的数组
更改未反映在以下 html 模板中:
<form class="navbar-form pull-right" role="search" data-bind="submit: search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search"
data-bind='text: query, valueUpdate: "afterkeydown"'>
</div>
<button type="submit" class="btn btn-default">
<span class="glyphicon glyphicon-search"></span> Search
</button>
</form>
<section data-bind="foreach: results">
<div class="row">
<div class="col-md-4 pull-left">
<label data-bind="text: name"></label><br/>
<label data-bind="text:category"></label>
</div>
<div class="col-md-7 pull-right">
<label data-bind="text:shortDescription"></label>
</div>
</div>
</section>
section
使用foreach: results
. _ 当应用更改后(添加到 observable 的项目列表)并且我在从其他页面导航后进入页面时,以下行正确反映了计数:
<span data-bind="text: results().length"></span> items found
我究竟做错了什么?
编辑:- 难题的一部分已解决
如果我使用results()
而不是results
,与列表的绑定有效!!!
<section data-bind="foreach: results()">
编辑 3:- *创建了简单的cshtml
视图并在那里使用了 viewmodel 的ko.applyBindings
方法。它以这种方式工作。似乎我缺少一些drundal
接线*