Ember.Route.model
पर params
चर का उपयोग है, लेकिन Ember.Route.setupController
नहीं है। यह मेरे लिए परेशानी है, क्योंकि मेरे पथ में कई गतिशील खंड हैं, और मुझे अपने टेम्पलेट में उन सभी का उपयोग करने की आवश्यकता है।Ember.Route के भीतर से पैरामीटर तक पहुंचने का सही तरीका क्या है। setupController?
विशेष रूप से, मेरा पथ इस तरह दिखता है: /project/:project_id/task/:task_id
। ध्यान दें कि एक कार्य कई परियोजनाओं से संबंधित हो सकता है, सिर्फ एक ही नहीं। इसलिए हम यह नहीं बता सकते कि हम जिस परियोजना को देख रहे हैं, वह केवल कार्य को देख रहे हैं: हमें यूआरएल में मिली परियोजना आईडी का उपयोग करना होगा। यह सिर्फ hacky लगता है
App.TaskRoute = Ember.Route.extend({
// This works just fine:
serialize: function(model) {
return {
task_id: model.get('id'),
project_id: this.modelFor('project').get('id')
};
},
model: function(params) {
this.set('parentProjectId', params.project_id);
return App.Task.find(params.task_id);
},
setupController: function(controller, model) {
var parentProject = this.modelFor('project') ?
this.modelFor('project') :
App.Project.find(this.get('parentProjectId'));
controller.set('parentProject', parentProject);
controller.set('content', model);
}
});
शायद मैं पागल जा रहा हूँ, यहाँ मैं इसे कैसे वर्तमान में कर रहा हूँ है। यदि मार्ग पैरामीटर तक पहुंच के लिए था, तो उसके पास पहले से params
संपत्ति संलग्न होगी। क्या कोई बेहतर तरीका है?
संपादित करें: मैंने उपरोक्त कोड में कुछ अपडेट किया है। इसके अलावा, मेरे मार्ग इस तरह दिखते हैं:
App.Router.map(function() {
this.resource('project', { path: '/project/:project_id' });
this.resource('task', { path: 'project/:project_id/task/:task_id' });
});
आह, मुझे पता नहीं था कि मॉडल विधि को केवल पहले लोड पर ही बुलाया जाता है, लेकिन यह मुझे देख रहा है कि बहुत सी quirkiness बताता है। उदाहरण के लिए, उपरोक्त मेरा कोड काम नहीं करता है अगर मैं सीधे/प्रोजेक्ट/1/कार्य/2 खोलता हूं, क्योंकि 'मॉडल' नहीं कहा जाता है, इसलिए' parentProjectId' विशेषता सेट नहीं होती है। उस स्थिति में, मुझे 'var parentProject = this.modelFor ('project')' setupController 'के अंदर' करना होगा। मेरे पास एक अलग प्रोजेक्ट रूट है। ओपनिंग/प्रोजेक्ट/1 एक परियोजना के लिए कार्य दिखाएगा। किसी कार्य पर क्लिक करने से/प्रोजेक्ट/1/कार्य/1 खुल जाएगा। कार्य दृश्य को परियोजना के लिए एक लिंक की आवश्यकता है, इसलिए मैं यूआरएल से परियोजना खींच रहा हूं। – NudeCanalTroll
तो यह अब काम करता है? मेरा विचार यह भी इस्तेमाल करना था। ModelFor ("प्रोजेक्ट")। जब आप अपना ऐप/प्रोजेक्ट/1/कार्य/2 के माध्यम से दर्ज करते हैं, तो प्रोजेक्ट रूट पहले और उसके मॉडल हुक को मारा जाना चाहिए। इसके बाद आप इसे एक्सेस करने के लिए मॉडलफोर का उपयोग कर सकते हैं। जब आप अपने डेटा को मॉडल करने के लिए एम्बर-डेटा का उपयोग करते हैं, तो यह आपके नियंत्रक में पैरेंटप्रोजेक्ट को सेट करने के लिए केवल थोड़ी सी अनावश्यक महसूस करता है। आपके टास्कमोडेल पर उस संपत्ति का अस्तित्व नहीं होना चाहिए? – mavilein
एक कार्य कई परियोजनाओं (टैग जैसे परियोजनाओं के बारे में सोचें) से संबंधित हो सकता है, इसलिए "प्रोजेक्ट से संबंधित" एसोसिएशन होने की बजाय यह "कई परियोजनाएं" एसोसिएशन है। इस प्रकार, मैं यह नहीं बता सकता कि मैं किस परियोजना के अंदर हूं (और इस प्रकार जहां बैक बटन को लिंक करना चाहिए) बस कार्य को देखकर। मुझे यूआरएल जांचना है। वैसे भी, मैं मॉडल के लिए मॉडल की कोशिश करूंगा। मुझे लगता है कि मेरे मार्गों को गलत तरीके से स्थापित किया गया है, इसलिए/प्रोजेक्ट/1/टास्क/2 पर जाकर पहले टास्क रूट को मार रहा है।मुझे लगता है कि मुझे अपने परियोजना मार्गों के अंदर अपने कार्य मार्गों को घोंसला करने की ज़रूरत है? मैं यह दिखाने के लिए अपना प्रश्न अपडेट करूंगा कि मेरे मार्ग कैसा दिखते हैं। – NudeCanalTroll