jQuery と KnockoutJs テンプレートを使用して、DOM で次の HTML を作成したいと思います。
<div class="messageToAndFromOtherMember" id="13">
<span>the message</span>
<span>2012-12-02 14:05:45.0</span>
</div>
次のように KO テンプレートを書き始めました。
<div class="messageToAndFromOtherMember" data-bind="attr:{ id: messageId}">
<span data-bind="text: message"></span>
<span data-bind="text: sendDateFmted"></span>
</div>
ajax リクエストが成功すると、次の js が実行されます。
var messageViewModel = {
message: response.message,
sendDateFmted: response.sendDateFmted,
messageId: response.messageId
};
ko.applyBindings(messageViewModel);
ここで、バインディングを実際に行う方法と場所がわかりません。ajax リクエストが完了する前にメッセージが存在せず、複数のメッセージを持つことができるため...
誰でも解決策を提案できますか?
EDIT 1 :これをhtmlページに追加しました:
<div data-bind="template: { name: 'message-template', data: messageViewModel }"></div>
次のjsエラーが発生します。
不明なエラー: バインドを解析できません。メッセージ: ReferenceError: $messageViewModel が定義されていません。バインディング値: template: { name: 'message-template', data: messageViewModel }
編集 2 : 次のようにコードを変更しました。
var messageViewModel = {
data: ko.observable({
message: response.message,
sendDateFmted: response.sendDateFmted,
messageId: response.messageId
})
};
$("<div>",{
class:"messageToAndFromOtherMember"
}).data("bind", "template: { name: 'message-template', data: data }").appendTo("#messagesToAndFromOtherMember");
ko.applyBindings(messageViewModel);
あるメッセージを追加してから別のメッセージを追加できるようにするために、jQuery から要素を追加できる必要があることに注意してください。ただし、上記のjQueryコードは機能せず、DOMにデータバインドなどは見られません...