一時的なオブザーバブル/計算されたオブザーバブルを通過することなく、次のことを行うことは何らかの方法で可能ですか? データを表示するためのルックアップに使用される共通データがあります。
<span data-bind="text: lookupContactName(31)"></span>
結果:関数が実行され、パラメータが見つかり、ロジックはOKで、計算されたフルネームが返されますが、表示されません(おそらく観察できないため)
<span data-bind="text: lookupContactName(contactId)"></span>
結果: contactId が解析されないため、正しいパラメーター値が表示されません。
これが正しく機能するには、カスタムバインディングを作成する必要があると思いますか?
一般的に、私は、データを一度だけロードして ID を一致させようとするアプローチが良いアプローチであるかどうかについて少し疑問を持ち始めました。ビューはありますか?結合された db テーブル/ビュー/SP を作成する方が良いですか?
ありがとう、J.
ここに、私が使用している関連コードがあります...将来の助けのためにjsfiddleを学びます。
すべてのアラートは期待値を返しています...しかし、それでもテキストデータバインディングは値を受け取りません
共通データ ライブラリ:
customers.Contact = function () {
var self = this;
id = ko.observable();
title = ko.observable();
givenname = ko.observable();
surname = ko.observable();
fullName = ko.computed(function () {
return title()+". "+givenname()+" "+surname();
});
return {
id: id,
title: title,
givenname: givenname,
surname: surname,
fullName: fullName
};
};
customers.ContactList = function () {
var self = this;
contactList = ko.observableArray([]); //.publishOn("ContactList");
loadContactData = function () {
var self = this;
customers.helperDataService.getContactData(loadContactDataCallBack);
};
loadContactDataCallBack = function (json) {
var self = this;
$.each(json, function (i, p) {
var contact = new customers.Contact().id(p.Id)
.title(p.Title)
.givenname(p.Name)
.surname(p.Surname);
contactList.push(contact);
});
};
lookupContactName = function (id) {
var self = this;
alert("value to be found: "+id);
ko.utils.arrayForEach(contactList(), function (contact) {
alert("SEARCH: contactid: " + contact.id() + " - " + "id: " + id);
if (contact.id() === id) {
alert("FOUND: contactid: " + contact.id() + " - " + "id: " + id);
alert("value:" + contact.fullName());
return contact.fullName();
}
});
};
return {
loadContactData: loadContactData,
lookupContactName: lookupContactName
};
};
ここから呼び出される... (私はそれを contactId() に変更し、これは正しい値を関数に渡します)
<div>Creator: <span data-bind="text: lookupContactName(contactId())"></span></div>