1

背景:マッピング プラグインを使用して、単一ページの knockout.js アプリを作成しました。データは、サーバーから Websocket JSON を介して更新されます。アプリがデータを正常に受信しており (コンソールにデータを出力)、オブジェクトの削除/追加があった場合、ViewModel は問題なく更新されていることがわかります。

問題:オブジェクトのプロパティがサーバーから更新されても、ViewModel は変更されません。更新のたびに何らかの方法でオブジェクト プロパティを返す必要がありますか?

関連するコードのスニペットは次のとおりです。

var userMapping = {
        "users": {
            key: function(data) { return ko.utils.unwrapObservable(data.id); },
            create: function(options) {
                // for sortable ui access
                return createUser(options.data);
            }
        }
    };
var jobMapping = {
        "jobs": {
            key: function(data) { return ko.utils.unwrapObservable(data.id); },
            create: function(options) {
                // for sortable ui access
                return createJob(options.data);
            },
            update: function(options) {
                return createJob(options.data);
            }
        }
    };
var createJob = function(job, user) {        
        // leaflet init
        createJobIcon(job);

        // general data mapping
        var result = ko.mapping.fromJS(job);
        return result;
    };
self.engineModel.update = function(data) {
       ko.mapping.fromJS(data, userMapping, self.engineModel);
    };

ViewModel では次のようになります。

<li data-bind="visible: canceled()==false, attr: {class: 'job-li canceled-'+canceled()+' started-'+started()+' hold-'+hold() }">

洞察をありがとう!

4

1 に答える 1

2

私は動作を修正することができましたが、決定による長期的な影響については懐疑的です.

この行を削除しました: key: function(data) { return ko.utils.unwrapObservable(data.id); },

これで、すべてが正常に更新されます。誰かがさらなる処理について考えているなら、私はすべて耳にします (たとえば、これはパフォーマンスに影響しますか?)

于 2012-04-19T18:42:27.630 に答える