2013-09-02 5 views
12

मैं एक टेम्पलेट के अंदर render सहायक का उपयोग कर रहा हूं, जो एक टाइपहेड के साथ एक खोज बॉक्स प्रस्तुत करता है।एम्बर 1.0.0 - अब नियंत्रक को देखने से नहीं पहुंच सकता है?

अनिवार्य रूप से (कोड संक्षिप्तता के लिए हटाया):

script(type='text/x-handlebars', data-template-name='index') 
    {{render search}} 

script(type='text/x-handlebars', data-template-name='search') 
    {{view App.TaggableInput valueBinding="searchText"}} 

कौन सा मुझे एक SearchControllerIndexController से अलग कर देता है।

App.TaggableInput अंदर मैं searchController हथियाने रहा हूँ KeyUp घटना पर कुछ जाँच करने के लिए:

App.TaggableInput = Ember.TextField.extend({ 
    keyUp: function(e){ 
     var controller = this.get('controller'); 
     // Do stuff with the controller 
    } 
}); 

एंबर RC7 पर, मैं theview अंदर नियंत्रक का उपयोग कर सकते के रूप में आप this.get('controller').get('searchText') साथ उम्मीद थी।

हालांकि एम्बर 1.0.0 this.get('controller') में दृश्य देता है, और जो भी मैं करता हूं मुझे searchController नहीं मिल सकता है।

मुझे क्या बदल रहा है या मुझे क्या करना है इसके बारे में एम्बर वेबसाइट पर कोई संबंधित जानकारी नहीं मिल रही है ... अभी के लिए मैं आरसी 7 के साथ चिपक रहा हूं।

कोई विचार? मैंने आज सुबह इस पर घंटों बिताए हैं और इसे समझ नहीं सकते हैं। धन्यवाद।

अद्यतन: फिक्स्ड!

मैंने this.get('controller') को this.get('targetObject') के लिए बदल दिया और यह पहले जैसा काम करता है। इसे खोजने के लिए a recent commit in ember source के माध्यम से एक peruse था ...

आपके सुझाव लोगों के लिए धन्यवाद!

+0

मैं एक ही या 1.0.0 के साथ एक समान समस्या है। मुझे लगता है कि 'this.get (' नियंत्रक ') आपको' TaggableInputController 'बनाया गया implicilty देता है और आपके वर्तमान मार्ग के नियंत्रक नहीं। लेकिन यह सिर्फ एक अनुमान है। – splattne

+3

'एम्बर। टेक्स्टफिल्ड' 'व्यू 'का विस्तार करने के लिए उपयोग किया जाता है। जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, तो 'view' का 'नियंत्रक' डिफ़ॉल्ट 'parentView.controller' पर डिफ़ॉल्ट होता है। एम्बर 1.0.0 के रूप में, 'एम्बर। टेक्स्टफिल्ड' 'घटक 'बढ़ाता है। एक 'घटक' में नियंत्रक नहीं होता है बल्कि इसके बजाय 'targetObject' होता है। आपका समाधान क्यों काम करता है! –

+0

मेरे पास 'एम्बर। टेक्स्टफिल्ड' एक उप-वर्ग 'टेक्स्ट-इनपुट' घटक वाला एक एम्बर ऐप है, और 'एम्बर। चयन' वर्ग उप-वर्ग 'चयन-इनपुट' घटक है। हालांकि, 'चयन-इनपुट' कोड में मैं 'this.get ('नियंत्रक') के साथ नियंत्रक तक पहुंचने में सक्षम था, और 'टेक्स्ट-इनपुट' में मुझे उपरोक्त अद्यतन अनुभाग में सुझाए गए समाधान का सहारा लेने की आवश्यकता थी ('this.get ('targetObject')')। मैं बस इसके बारे में टिप्पणी करना चाहता था क्योंकि यह समेकित लगता है, और शायद किसी के कारणों पर कुछ अंतर्दृष्टि है। – Ernesto

उत्तर

0

मुझे लगता है कि एम्बर ने अपना व्यवहार नहीं बदला है। मैंने JSBin बनाया, जहां मैं नियंत्रक को सफलतापूर्वक प्राप्त करने में कामयाब रहा।

देखें:

App.FooView = Ember.TextField.extend({ 
    didInsertElement : function(){ 
    console.log(this.get("controller.constructor")); 
    console.log(this.get("context.constructor")); 
    } 
}); 

टेम्पलेट:

{{render foo}} 

और पहली लॉग बयान

क्या मैं एक साधारण दृश्य बनाने और था था {{render}} सहायक के माध्यम से यह दिखाने एक संबंधित नियंत्रक दिखाया। क्या आप मेरे कोड और आपके बीच कोई वैचारिक अंतर देख सकते हैं?

+0

थोड़ा वैचारिक अंतर है लेकिन मैं इसे काम नहीं कर सकता ... – Iest

5

मुझे लगता है कि अपने कोड

App.TaggableInput = Ember.TextField.extend({ 
    keyUp: function(e){ 
     var controller = this.get('controller'); 
     // Do stuff with the controller 
    } 
}); 

इस लाइन

var controller = this.get('controller'); 

में अपने (subview) से जुड़े नियंत्रक मार्ग के नियंत्रक का उपयोग करने के बजाय इस लाइन का उपयोग करने के

कोशिश हो जाता है लगता है :

var controller = this.get('parentView.controller'); 
+0

मेरे पास एक ही समस्या है और मैंने एक ही दृष्टिकोण (जो काम करता है) का उपयोग किया। लेकिन एम्बर 1.0 में क्या बदल गया है जो इसका कारण बनता है? – peterfromearth

+0

यह मेरे लिए 'indexController' लाता है, जो 'searchController' का अभिभावक है :( – Iest

3

वर्तमान में, {{render}} सहायक 2 तर्क लेता है, पहला संदर्भ है, दूसरा मॉडल है। मैं नियंत्रक को स्पष्ट रूप से सेट करने के बजाय मॉडल के नियंत्रक के लिए इस विधि का उपयोग करने और नामकरण सम्मेलन का पालन करने की सलाह देता हूं।

आप यहाँ डॉक्स पा सकते हैं: http://emberjs.com/guides/templates/rendering-with-helpers/#toc_the-code-render-code-helper

विचारों से एक्सेस करना नियंत्रकों भी इस चर्चा में पता लगाया जा रहा था: https://github.com/emberjs/ember.js/issues/1712#issuecomment-31183940

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