我想“ 数据绑定 ”属性添加到使用jQuery如下一个div:
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);
“ 数据绑定 ”由KnockoutJs必需的。 但是我得到的是这样的空div:
<div class="messageToAndFromOtherMember"></div>
注意,这里是没有这样的属性data-bind
,因此在div保持为空...
jQuery的.data()
存储值的内存,并使用data-*
属性初始化。 您可能希望通过在元素创建设置它坚持。
$("<div/>", {
class: "messageToAndFromOtherMember",
"data-bind": "template: { name: 'message-template', data: data }"
}).appendTo("#messageToAndFromOtherMember");
亚历山大的答案肯定是正确的,在一般意义上,但我不禁注意到,在你的具体的例子,你似乎是通过为每个消息一个新的绑定范围来增加邮件到您的代码。 如果是这样的话,我认为你是不正确的使用淘汰赛(如果没有,让我知道,我只会删除此)。
如果您是从服务器获取新邮件,只是想在页面上显示他们的名单,一个更好的结构将使用ObservableArray ,并简单地推新的消息给它。 标准的淘汰赛绑定会自动将新信息添加到您的HTML,而无需创建一个新的绑定范围,并为新的消息完全独立的视图模型的一塌糊涂。 您可以在行动中看到这个小提琴 。
这里是相当做作视图模型:
var ViewModel = function(data) {
var self = this;
self.messages = ko.observableArray();
self.newMessage = ko.observable('');
self.addMessage = function() {
var message = new Message({ message: self.newMessage()});
self.newMessage('');
self.messages.push(message);
};
};