編集:- プロジェクトの完全なコードを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()
、undefined が返されます。 2番目に、次の行で新しいアイテムを検索して追加
results
します:results(data);//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
ます。変更が適用された後 (オブザーバブルに追加されたアイテムのリスト)、他のページから移動した後にページに移動すると、次の行にカウントが正しく反映されます。
<span data-bind="text: results().length"></span> items found
私は何を間違っていますか?
編集:- パズルの一部が解決されました
results()
の代わりに使用するとresults
、リストとのバインディングが機能します!!!
<section data-bind="foreach: results()">
EDIT 3:- *シンプルなcshtml
ビューを作成し、ko.applyBindings
メソッドでビューモデルを使用しました。このように動作します。drundal
配線の一部が欠けているようです*