2013-04-30 10 views
6

के साथ रूट करने के लिए एक लिंक कैसे सेट कर सकता हूं मैं गतिशील सेगमेंट के साथ रूट करने के लिए एक लिंक कैसे सेट कर सकता हूं। अनुसार मार्गदर्शन करने के मैं इसमैं डायनामिक सेगमेंट

window.App = Ember.Application.create() 
App.Router.map -> 
    @resource 'products' 
    @resource 'product', path: '/product/:product_id' 
मेरे टेम्पलेट में

के साथ शुरू:

{{#linkTo "product.1"}}products{{/linkTo}} 

दुर्भाग्य से यह मेरे follwing त्रुटि देता है:

Uncaught Error: assertion failed: The attempt to linkTo route 'product.1' failed. 
The router did not find 'product.1' in its possible routes: 'products', 'product', 'index' 

उत्तर

10

{{linkTo}} मार्ग Router.map में परिभाषित की उम्मीद है, तो आपके मैपिंग के अनुसार यह product होना चाहिए।

गतिशील सेगमेंट के लिए, आपको एक ऑब्जेक्ट भी पास करना होगा जिसे ProductRoute में क्रमबद्ध किया जाएगा। लगभग सभी परिदृश्यों में क्रमबद्धता डेवलपर के बिना कुछ भी करने के लिए होती है क्योंकि एम्बर सम्मेलनों पर निर्भर करता है। दुर्लभ मामलों में, किसी को serializelittle differently लागू करना होगा, लेकिन ज्यादातर मामलों के लिए आपको इसे छूना नहीं है।

आप एक {{each}} पाश अंदर {{linkTo}} उपयोग कर रहे हैं आप इस तरह यह कर सकते हैं:

{{#each product in controller}} 
    {{#linkTo product product}}Details{{/linkTo}} 
{{/each}} 

या

{{#each controller}} 
    {{#linkTo product this}}Details{{/linkTo}} 
{{/each}} 

कहाँ पहला तर्क मार्ग का नाम है और दूसरा अपने मॉडल है वस्तु। पहले कोड में ऑब्जेक्ट को product के रूप में भी नामित किया गया है, जबकि दूसरे में इसे बस this के रूप में पारित किया जा रहा है, जो पुनरावृत्ति का उत्पाद है।

आप एक असामान्य परिदृश्य जहां एक गतिशील मार्ग से जोड़ने के लिए है, जबकि {{each}} पाश का उपयोग नहीं है है, तो आप controller (पसंदीदा) में वस्तु या view को बेनकाब करने के लिए है।

{{#linkTo product controller.product}}Product{{/linkTo}} 

कैसे मार्ग आईडी पता है:

App.SomeController = Em.Controller.extend 
    product: null 

App.SomeRoute = Em.Route.extend 
    ### 
    controller is actually `SomeController` here 
    model is not being used, and is null, while the actual model being 
    supplied to the controller is `product`, retrieved from store 
    ### 
    setupController: (controller, model) -> 
    product = App.Product.find 1 
    controller.set 'product', product 
    return 

आपका टेम्प्लेट करने के समान होगा जबकि: तो फिर तुम निम्नलिखित के समान कुछ करना होगा?

Conventions। मार्ग serialize आपके द्वारा पारित ऑब्जेक्ट होगा, और एक ऑब्जेक्ट को एक ही संपत्ति के साथ बेनकाब करेगा, जिसमें उस रूट के लिए मॉडल का नाम होगा, "_id" होगा, जो इस मामले में product_id होगा, इसलिए जब आप उस लिंक पर क्लिक करेंगे, ऐप ProductRoute को सक्रिय करता है, उस आईडी प्रॉपर्टी को बनाने वाली धारावाहिक विधि चलाता है, जिसे बाद में model हुक के तर्क के रूप में उपयोग किया जाएगा। यही वह जगह है जहां आप findparams.product_id को तर्क के रूप में गुजरते हैं। फिर मॉडल उस मॉडल का वादा करता है जिसका उपयोग setupController द्वारा किया जाएगा, ऑब्जेक्ट को व्यू परत पर controller.content या बस controller के रूप में उजागर किया जाएगा।

+0

'# प्रत्येक'-लूप में मुझे' product' उद्धृत करना था: '{{#linkTo 'product' this}} विवरण {{/ linkTo}}'। –

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