【发布时间】:2013-10-26 01:08:01
【问题描述】:
编辑:- 我已在 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 视图,并通过 ko.applyBindings 方法使用了视图模型。它以这种方式工作。似乎我缺少一些drundal 接线*
【问题讨论】:
-
您确定从服务器返回的结果中包含您视图中列出的属性吗?
-
@PWKad 是的,属性在那里。但无法弄清楚什么是错的。 :( 不用管属性,即使
results().length也不会出现,直到我再次导航到它重新加载视图。 -
你能试试监控你的查询对象的值吗?试着把它放在你的视图中
-
@eggward 你试过从 github 运行示例吗?
标签: asp.net-mvc knockout.js durandal