1

テンプレートにバインドされたコレクション プロパティを持つ ember オブジェクトがあります。このプロパティを次のように設定しようとすると:

processingJob.set("logMessages", updatedProcessingJob.logMessages)

この例外は IE でのみ発生します。他のすべてのブラウザーは正常に動作します。

SCRIPT5022: アサーションが失敗しました: Ember.CollectionView のコンテンツは Ember.Array を実装する必要があります。[オブジェクト オブジェクト]、[オブジェクト オブジェクト]、[オブジェクト オブジェクト] を渡しました

次のようにテンプレートにバインドされます。

{{#each content.logMessages}}
    {{#isWorkflowError}}
        <li class="error"><i class="icon-thumbs-down"></i> {{message}}</li>
    {{else}}
        <li><i class="icon-thumbs-up"></i> {{message}}</li>
    {{/isWorkflowError}}
{{/each}}

テンプレートを削除すると、エラーは発生しません。Ember.CollectionView などを使用する必要がありますか? それともIEのバグですか?

4

1 に答える 1

0

この問題の解決策を見つけて、ここに投稿しました:https ://github.com/emberjs/ember.js/issues/1525

SignalRを使用して更新を残り火アプリにプッシュしています。これを行うためのコードは次のようになります。

App.ProcessingJobArray = Ember.ArrayProxy.extend
    init: ->
        @set("content", Ember.A())
        if $.connection
            @client = $.connection.processingJobHub
            @client.processingJobUpdated = (updatedProcessingJob) =>                
                processingJob = @get("content").find((item) ->
                    item.get("id") == updatedProcessingJob.id
                )
                if not processingJob
                    processingJob = App.ProcessingJob.create()
                    @get("content").pushObject(processingJob)
                processingJob.setProperties(updatedProcessingJob)
            $.connection.hub.start()

updateProcessingJob JSONオブジェクトには配列logMessagesが含まれており、IEではこの配列のメタハッシュがないためエラーが発生していました。この問題を修正するために、updatedProcessingJobのディープコピーを実行しました。

updatedProcessingJob = $.extend(true, {}, updatedProcessingJob)
于 2012-11-10T13:51:18.410 に答える