7

別の長い調査の後、sthが出てきました:-) 問題は関数「getObjectByName」にあるようです。requireJS(ADM)ではうまく動作しません。現在、問題を解決するために global var をセットアップする必要があります。より良い解決策があるに違いないと確信しています。

これが私の一時的な解決策です:

(1) グローバル変数をセットアップし、検索モデルのスコープをグローバル (「APP」) にセットアップします。

var APP = {};

define(['backbone-relational'], function(){
    Backbone.Relational.store.addModelScope(APP);
})

(2) リレーションモデルをグローバルにエクスポート

APP.YourRelationalModel = YourRelationModel;

うまくいきますが、うまくいきません...より良い答えを本当に楽しみにしています。ありがとう。

//------------

テスト バージョン:

1.Backbone-Relational 0.8.5 
2.Backbone 1.0.0 and Underscore 1.4.4
3.JQuery 1.8.3
4.RequireJS 2.1.5

コードは非常に単純です: (またはhttps://github.com/bighammer/test_relational_amd.gitを参照)

require.config({

paths : {

    js                    : 'js',
    jquery                : 'js/jquery-1.8.3',
    underscore            : 'js/underscore',
    backbone              : 'js/backbone',
    'backbone-relational' : 'js/backbone-relational'
},

shim : {
    underscore : {
        exports : '_'
    },
    backbone   : {
        deps    : ['underscore', 'jquery'],
        exports : 'Backbone'
    },

    'backbone-relational' : {
        deps: ['backbone']
    }
}

});

define(['backbone', 'backbone-relational'], function (Backbone) {

var Child = Backbone.RelationalModel.extend();
var Parent = Backbone.RelationalModel.extend({
    relations : [
        {
            key          : 'child',
            type         : Backbone.HasOne,
            relatedModel : 'Child'
        }
    ]

});

var test = new Parent();

});

上記のコードを main.js に保存し、次のように index.html に含めます。

うまくいきません。警告メッセージがあります:

Relation=child: missing model, key or relatedModel (function (){ return parent.apply(this, arguments); }, "child", undefined). 

backbone-relational のソース コードを読んで、名前空間に問題があることを知りました。Relational-Backbone が「Parent」で定義された relatedModel を見つけることができません (つまり、releatedMode:「Child」が見つかりません)。私のjavascriptの知識が限られているため、これを修正する解決策を見つけることができませんでした:-)

誰でもこれで私を助けることができますか?

質問する前に、次の解決策を調べました。

requireJs を使用
する Backbone.RelationalModel Backbone-relational を AMD で動作させることができない (RequireJS)
Use! を使用して Backbone.Relational をロードする プラグイン

この場合、それらのどれも機能しませんでした。

4

2 に答える 2

15

relatedModel を文字列で参照する必要はなく、直接参照できるため、 の代わりにrelatedModel: 'Child': を使用するだけですrelatedModel: Child

また、requireJS を使用しているため、他のファイルから簡単にモデルを参照できます。

define(['backbone', 'models/child', 'backbone-relational'], function (Backbone, Child) {
  var Parent = Backbone.RelationalModel.extend({
    relations : [{
        key          : 'child',
        type         : Backbone.HasOne,
        relatedModel : Child
    }]
  });

  var test = new Parent();
});
于 2013-04-12T21:02:12.780 に答える
0

上記の解決策は私には当てはまりませんでした。依存関係から始めて、Rails Asset Pipeline (RequireJS/AMD/CommonJS/anything ではない) から徐々にコードを Webpack に移動しています。backbone-relationalモデルによる Webpack バンドルの準備を要求するように移動し、リレーション定義がまだ Rails Asset Pipeline にあると、多くの説明できない問題が発生し始めました。Relation=child: missing model, key or relatedModel (function (){ return parent.apply(this, arguments); }, "child", undefined).

私の場合、私の側で発見するのに長い時間がかかったにもかかわらず、解決策は非常に単純になりました。

// In a Webpack module, later included into Rails Asset Pipeline
// temporarily to facilitate migration

require('expose?Backbone!backbone') // Exposing just for migration
require('backbone-relational')
Backbone.Relational.store.addModelScope(window)

backbone-relationalデフォルトでは、グローバル スコープを使用して文字列ベースの s を解決しますが、実際のrelatedModelグローバル スコープなしで必要とされたため、解決策は単にそれを using に渡して、指定されたモデルのスコープを検索できるようにすることです。addModelScope

于 2016-11-18T03:49:53.980 に答える