2013-04-12 8 views
7

एक और लंबे शोध के बाद, sth बाहर आता है :-) ऐसा लगता है कि समस्या "getObjectByName" फ़ंक्शन के बारे में है। यह आवश्यकता जेएस (एडीएम) के साथ अच्छी तरह से काम नहीं कर सकता है। वर्तमान में, मुझे समस्या को ठीक करने के लिए एक ग्लोबेल var सेट करना है। मुझे यकीन है कि बेहतर समाधान होना चाहिए।RequjS के साथ बैकबोन-रिलेशनल (0.8.5) काम कैसे करें?

यहाँ मेरी अस्थायी soluton है:

(1) सेटअप एक वैश्विक वर और सेटअप वैश्विक ("एपीपी") के लिए खोज मॉडल गुंजाइश

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.RelationalModel using requireJs
Can't get Backbone-relational to work with AMD (RequireJS)
Loading Backbone.Relational using Use! plugin

उनमें से कोई भी इस मामले में काम किया।

+1

एक और लंबे शोध के बाद, sth बाहर आता है :-) ऐसा लगता है कि समस्या "getObjectByName" फ़ंक्शन के बारे में है। यह आवश्यकता जेएस (एडीएम) के साथ अच्छी तरह से काम नहीं कर सकता है। वर्तमान में, मुझे समस्या को ठीक करने के लिए एक ग्लोबेल var सेट करना है। मुझे यकीन है कि बेहतर समाधान होना चाहिए। यहां मेरा अस्थायी समाधान है: (1) एक वैश्विक var सेटअप करें और वैश्विक मॉडल ("एपीपी") var APP = {}; परिभाषित ([ 'रीढ़ की हड्डी-संबंधपरक'], function() { Backbone.Relational.store.addModelScope (एपीपी); }) (2) – bighammer

उत्तर

15

आपको स्ट्रिंग द्वारा संबंधित मॉडल को संदर्भित करने की आवश्यकता नहीं है, तो आप इसे सीधे संदर्भित कर सकते हैं, इसलिए relatedModel: 'Child' के बजाय, बस उपयोग करें: relatedModel: Child

और चूंकि आप requJ का उपयोग कर रहे हैं, तो आप आसानी से अन्य फ़ाइल से मॉडल का संदर्भ दे सकते हैं।

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(); 
}); 
+0

धन्यवाद एक बहुत। यह काम करता हैं। असल में, मैंने संदर्भ एक बार उपयोग करने की कोशिश की, लेकिन मैंने काम नहीं किया। अब पता लगाएं कि यह उस समय क्यों काम नहीं करता था। यह परियोजना स्रोत कोड में मेरी दूसरी गलती के कारण होता है :( – bighammer

0

उपर्युक्त समाधान मेरे लिए लागू नहीं हुआ। मैं निर्भरता से शुरू, वेबपैक में रेल एसेट पाइपलाइन (आवश्यकता जेएस/एएमडी/कॉमनजेएस/कुछ भी नहीं) से कोड को धीरे-धीरे ले जा रहा हूं।जब मैं रेल एसेट पाइपलाइन में थे अपने मॉडल और संबंध परिभाषाओं द्वारा Webpack बंडल तैयारी में backbone-relational की आवश्यकता होती है चले गए, मैं मेरे मामले अस्पष्टीकृत 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 डिफ़ॉल्ट रूप से स्ट्रिंग आधारित relatedModel रों को हल करने के लिए अपने वैश्विक विस्तार का उपयोग करता है, लेकिन क्योंकि यह एक असली वैश्विक विस्तार के बिना आवश्यक था, समाधान है कि पारित करने के लिए बस हैaddModelScope का उपयोग करने में, इसलिए यह निर्दिष्ट मॉडल के लिए उस दायरे को खोज सकता है।

संबंधित मुद्दे