3

在我的 index.html 中,我有以下模板

<script type="text/x-handlebars">
    {{#with ChatApp.messagesController}}
      {{view Ember.TextArea valueBinding="content.message" rows="12" cols="70"}}
    {{/with}}
  </script>

我的消息模型看起来像这样

ChatApp.Message = Ember.Object.extend({
  message: null
});

我的消息视图和控制器看起来像这样

ChatApp.messagesView = Ember.View.extend({});

ChatApp.messagesController = Ember.ArrayController.create({                                                                                           
  content: [],
  text: '',
  sendMessage: function() {
    var newChatText = this.get('text');
    socket.emit('sendchat', newChatText);
  },
  updateChat: function(username, text) {
    var controller = this;
    var content = this.get('content');
    var newMessage = ChatApp.Message.create({ message: text });

    content.push(newMessage);
    console.log("update " + controller.get('content'));
    controller.set('content', content);
  }
});

我可以在 console.log 中看到,每次更新都会将另一个模型对象添加到内容中,但文本区域没有更新

这是 jsFiddle 网址http://jsfiddle.net/eDfKJ/

先感谢您

4

2 回答 2

4

相反,我要做的是拥有一个计算属性,该属性绑定到内容并返回所有消息的聚合字符串,我会将 textarea 绑定到该属性。

就像是:

messages: function() {
    var content = this.get('content');
    var messages = "";

    ... loop the content and combine the messages string... 

    return messages;

}.property('content.@each')

并在您的模板中:

  <script type="text/x-handlebars">
    {{#with ChatApp.messagesController}}
      {{view Ember.TextArea valueBinding="content.messages" rows="12" cols="70"}}
    {{/with}}
  </script>
于 2012-08-02T15:28:13.723 回答
2

@ShaiRez 和 @sly7_7 共同努力,所以我想在这里包含最终的工作解决方案

<script type="text/x-handlebars">
    {{#with ChatApp.messagesController}}
      {{view Ember.TextArea valueBinding="messages" rows="12" cols="70"}}                                                                                                            
    {{/with}}
  </script>

ChatApp.messagesController = Ember.ArrayController.create({
  content: [],
  text: '',
  sendMessage: function() {
    var x = this.get('text');
    socket.emit('sendchat', x);
  },    
  updateChat: function(username, text) {
    var controller = this;
    var newMessage = ChatApp.Message.create({ message: text });
    controller.content.pushObject(newMessage);
  },
  messages: function() {
    var content = this.get('content');
    var messages = "";
    for(i = 0; i < content.length; i++) {                                                                                                                                            
      messages += content[i].message                                                                                                                                                 
      messages += '\n';
    }
    return messages;
  }.property('content.@each')
  });
于 2012-08-02T17:54:34.737 回答