2017-03-04 101 views
4

我正在嘗試集成一個Javascript庫,我正在用EmberJS構建。聲明失敗:您必須使用Ember.set()將屬性([object Object])設置爲`[object Object]`

實施例幾乎工作集成: https://github.com/pubnub/open-chat-framework/blob/ember/examples/ember

庫返回與許多嵌套的對象的單個對象。該庫基於網絡事件,因此子對象定期更新,無需用戶輸入。可以收聽的更新的火災事件。

這會導致EmberJS出現問題,因爲Ember要求通過我的庫不使用的Ember.set()來完成每個屬性更新。

該庫是一個通用的JS庫,所以我拒絕添加Ember特定的代碼給它。我想知道如何解決上述錯誤,而不重寫我的庫。

如何以Ember的方式打包基於事件的庫?我以前曾嘗試過全局和Ember服務。

在其他例子中,我看到人們在Ember特定的代碼中包含了庫的每個方法。這似乎是重複的。

是否可以手動告訴Ember對根對象的更改並讓Ember忽略所有其他更改?意思是,我可不可以觀察變化並在事情改變時手動告訴燼線。

該庫包含一個根事件發佈器,它會通知樹中任何對象的所有更改。

ember-cli: 2.11.1 
node: 6.7.0 
os: darwin x64 
+1

這聽起來像一個棘手的問題喲 – PubNub

回答

0

你不需要改變你創建的真棒庫。

每個人都想使用它,應該用它的方式來使用它。

只需要改變例子的控制器是這樣的:

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    OCF: null, 
    me: null, 
    messages: [], 
    messageInput: '', 
    init: function() { 

     this._super(...arguments); 

     // test 
     let OCF = window.OpenChatFramework.create({ 
      rltm: { 
       service: 'pubnub', 
       config: { 
        publishKey: 'pub-c-07824b7a-6637-4e6d-91b4-7f0505d3de3f', 
        subscribeKey: 'sub-c-43b48ad6-d453-11e6-bd29-0619f8945a4f', 
        restore: false 
       } 
      }, 
      globalChannel: 'ocf-demo-ember-2' 
     }); 
    this.set('OCF', OCF); 

     // create a user for myself and store as ```me``` 
     let me = this.get('OCF').connect(new Date().getTime()); 
    this.set('me', me); 

     this.get('me').plugin(window.OpenChatFramework.plugin.randomUsername(this.get('OCF').globalChat)); 

     this.get('OCF').globalChat.on('message', (payload) => { 
      console.log(payload) 
      this.get('messages').pushObject(payload); 
     }); 

    }, 
    actions: { 
     sendChat: function() { 
      let messageInput = this.get('messageInput'); 
      if(messageInput) { 

       this.get('OCF').globalChat.send('message', { 
        text: messageInput 
       }); 

       Ember.set(this, 'messageInput', ''); 

      } 

      return false; 

     } 
    } 
}); 
+0

我試圖複製和粘貼代碼,但我得到了同樣的錯誤。 OCF的一些子值會異步更新,不會使用'''.set()'''。我無法直接更新該代碼。有沒有辦法深入觀察對象以進行更改並禁用ember的自動同步? –

+0

@IanJennings我可以通過這個github工作得到這個例子 –

相關問題