Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery.data()不更新HTML5数据属性_Jquery_Knockout.js_Custom Data Attribute - Fatal编程技术网

jQuery.data()不更新HTML5数据属性

jQuery.data()不更新HTML5数据属性,jquery,knockout.js,custom-data-attribute,Jquery,Knockout.js,Custom Data Attribute,我正在尝试使用jQuery将“数据绑定”属性添加到div,如下所示: var messageViewModel = { data: ko.observable({ message: response.message, sendDateFmted: response.sendDateFmted, messageId: response.messageId }) }; $("<div>",{ c

我正在尝试使用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);
var messageViewModel={
数据:可观测({
message:response.message,
sendDateFmted:response.sendDateFmted,
messageId:response.messageId
})
};
$("",{
类:“messageToAndFromOtherMember”
}).data(“bind”,“template:{name:'message template',data:data}”).appendTo(“#messagesToAndFromOtherMember”);
应用绑定(messageViewModel);
KnockoutJs需要“数据绑定”。然而,我得到的只是这个空div:

<div class="messageToAndFromOtherMember"></div>

请注意,没有像
数据绑定这样的属性,因此div保持为空…

jQuery将值存储在内存中,并使用
数据-*
属性进行初始化。您可能希望在创建元素时设置它

$("<div/>", {
  class: "messageToAndFromOtherMember",
  "data-bind": "template: { name: 'message-template', data: data }"
}).appendTo("#messageToAndFromOtherMember");
$(“”{
类:“messageToAndFromOtherMember”,
“数据绑定”:“模板:{name:'消息模板',数据:}”
}).附于(“#发送给其他成员的消息和来自其他成员的消息”);

Alexander的答案在一般意义上是绝对正确的,但我不得不注意到,在您的特定示例中,您似乎通过为每条消息创建一个新的绑定范围来向代码中添加消息。如果是这种情况,我认为您使用了敲除错误(如果不是,请让我知道,我将删除此)

如果您正在从服务器获取新消息,并且只是尝试在页面上显示这些消息的列表,那么更好的结构是使用,并简单地将新消息推送到其中。标准的敲除绑定将自动将新消息添加到html中,而无需创建新的绑定范围和新消息的完全独立的viewmodel。您可以在中看到这一点

这是一个相当做作的ViewModel:

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);
    };
};

+1解释
.data()
将值存储在内存中。有时调用
.data()
时可能会产生混淆,因为它会读取元素的数据属性并将它们存储在内存中,据我所知,它会将内存中的存储用于此后的任何连续调用。使用
.data()
更新数据时,它不会写回元素,而只会更新内存中存储的数据。+1是一个有用的问题,因为这是一个常见问题。当使用
.data()
写入数据时,它不会更新任何元素,它只会将该元素的数据以键值对格式存储在内存中,在您的情况下是
bind
。是关键,其余的是价值。更多细节,请参阅。泰尔修斯,我对柯相当陌生。非常感谢您的回复。我肯定会考虑这一选择。我们在某些方面都是新的。我会花一些时间来浏览,它们可能会帮助您更好地理解模式。我会这样做。谢谢你的链接。