【发布时间】:2016-08-04 06:14:14
【问题描述】:
这应该是一个非常正常的任务,但我错过了一些东西。
我正在尝试将 Socket.io 与 Polymer 集成 [使用聊天应用程序] - 决定将 MessageList 和单个 messageItem 更改为 Polymer 组件。 SocketIo 公开了一个要从服务器抛出的 customEvent,服务器将消息作为数据发送,然后将其分配给自定义元素上的属性。
这是 MessageList 元素。
<link rel="import" href="/polymer/polymer.html">
<link rel="import" href="message.html">
<dom-module id='message-list'>
<template>
<style>
</style>
<ul id="messages">
<template is='dom-repeat' items="{{messageList}}" is="auto-binding">
<li>
<message-item message = "{{item}}"></message-item>
</li>
</template>
</ul>
</template>
<script>
var messageListElement = Polymer({
is : 'message-list',
properties : {
messageList : {
type : Array,
observer: '_messageListChanged',
reflect : true ,
value : function() {
return [{'inputMessage' : 'Welcome to the Chat' ,
'nickName' : 'System' , 'msgTime' : new Date()}]
}
//, notify : true
}
},
_messageListChanged: function(newValue , oldValue) {
console.log("Data changed");
},
created : function() {
console.log("messagelist created");
},
ready : function() {
console.log("messagelist ready");
},
attributeChanged : function() {
console.log("messagelist attributeChanged");
}
});
</script>
在 index.html 页面上 -
var self = this;
socket.on('chatMessage' , function(msg) {
self.messages.push(msg);
console.log(self.messages);
document.querySelector('message-list').messageList = self.messages;
});
所有这一切.. 每当客户端发送消息时,self.messages - 发布全部消息集,但自定义元素的“_messageListChanged”仅在第一次被调用。
有类似问题-Updating a polymer element property with data from API call
但是,分配数据,仅适用于第一次。 我也希望能够在不使用 ajax-iron 和其他东西的情况下做到这一点。
【问题讨论】: