2017-03-04 5 views
4

EmberJSでビルドしているJavascriptライブラリを統合しようとしています。アサーションに失敗しました:Ember.set()を使用して[オブジェクトオブジェクト]のプロパティを[オブジェクトオブジェクト]に設定する必要があります

例はほとんど働い統合: https://github.com/pubnub/open-chat-framework/blob/ember/examples/ember

ライブラリは、多くのネストされたオブジェクトを持つ単一のオブジェクトを返します。ライブラリはネットワークイベントに基づいているため、子オブジェクトはユーザーの入力なしで定期的に更新されます。聴くことができる更新された火災イベント。

Emberは、私のライブラリが使用しないEmber.set()で行われるすべてのプロパティの更新を必要とするため、EmberJSに問題が発生します。

ライブラリは汎用JSライブラリですので、Ember固有のコードを追加することを拒否しています。私は私のライブラリを書き直すことなく上記のエラーを解決する方法が不思議です。

Emberが希望する方法でイベントベースのライブラリをラップする方法はありますか?私は以前にグローバルと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の仕事の例をこれで得ることができました –

関連する問題