jQuery的。数据()不更新HTML5数据属性(jQuery .data() does not u

2019-07-04 09:54发布

我想“ 数据绑定 ”属性添加到使用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保持为空...

Answer 1:

jQuery的.data()存储值的内存,并使用data-*属性初始化。 您可能希望通过在元素创建设置它坚持。

$("<div/>", {
  class: "messageToAndFromOtherMember",
  "data-bind": "template: { name: 'message-template', data: data }"
}).appendTo("#messageToAndFromOtherMember");


Answer 2:

亚历山大的答案肯定是正确的,在一般意义上,但我不禁注意到,在你的具体的例子,你似乎是通过为每个消息一个新的绑定范围来增加邮件到您的代码。 如果是这样的话,我认为你是不正确的使用淘汰赛(如果没有,让我知道,我只会删除此)。

如果您是从服务器获取新邮件,只是想在页面上显示他们的名单,一个更好的结构将使用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);
    };
};


文章来源: jQuery .data() does not update HTML5 data attributes