2015-05-22 26 views
10

, bir Kor güzergahı ile bazı meta ilişkilendirmek istiyor ve şöyle yapmayı tercih ediyorum:Raporlama amacıyla

this.route('list', { path: '/list', description: 'Master List' }); 

sonra gibi yerlerden bu description özelliğine erişmek Uygulama yönlendiricisinde kendisini veya didTransition kanca gibi başka yollardan yönlendirin. Router ve Route kaynağını inceledim ve bunu gerçekten anladığımı söyleyemem, kesinlikle bu şekilde belirtilen özel özellikleri nasıl alacağımı anlamak için yeterince iyi değil. Görüyorum ki, DSL denen bir nesne var, this.routeyönteminde Router yönteminde belirtilen, ancak buradan oraya nasıl gidileceğini göremiyorum. Ember.Route'un bir alt sınıfından, this.router ve this.router.router olarak adlandırılan özellikleri görüyorum, ancak bunların ne anlama geldiğine dair net değilim.

Ya da, bana ne istediğini yapmasına izin aşağıdakiler de çalışacak: öyleyse nasıl olursa

this.route('list', { path: '/list' }, function() { 
    this.description = "Master List"; 
}); 

ben Router#map belirtilen bir rota ile özel özellikler ilişkilendirmek ve miyiz?

+1

Çalıştığınız kaynak koddan yararlanmaya çalıştığınızı görebiliyorum - bu yüzden Ember.Router/Ember.Route öğesinin varsayılan uygulamalarını genişletme/değiştirme konusunda rahat olmanız ve kendi sürümlerinizi EmberDSL - çok sayıda özel API'yi uygulayacak/değiştirecek - son hedefinize ulaşmak için. Uygulamanızı Ember'deki değişikliklerle güncel tutmak zorunda kalacaksınız - her zaman yükseltdiğinizde çalıştığınızdan emin olun .. İstediğiniz sonucu elde etmek için yapmak istediğiniz bir şey mi? – jmurphyau

cevap

0

Sonra, ihtiyacım olan verileri kaydeder kendi "yol" işlevini yazarken, aşağıdaki satırlar boyunca bu çözmeye sona

var myRouteData = {}; 

function route(dsl, name, options, fn) { 
    if (typeof options === 'function') fn = options, options = {}; 
    var routeName = dsl.parent ? dsl.parent + '.' + name : name; 
    myRouteData[routeName] = { options.myRouteOption }; 

    dsl.route(name, options.fn); 
} 

Kullanım:

this.resource('foo', function() { 
    route(this, 'bar', {myRouteOption: true}); 
}); 
DSL boyunca geçirir
2

Orada o yönlendirici tanımlanan bir rota hakkında meta verileri ayarlamak için zarif bir yolu olarak görünmektedir, ama belki uygulamanız denetleyici içinde bu çirkin çözüm çalışmaz:

currentPathChange: function() { 
    switch(this.get('currentPath')){ 
    case 'test.index': 
     console.log('test.index is the foo!'); 
     break; 
    case 'test.new': 
     console.log('test.new is the bar!'); 
     break; 
    } 
}.observes('currentPath') 

JSBin DEMO

+0

Doğru, teşekkürler, bu kaçınmaya çalıştığım şeylerden biri. –

0

Ember Router'ını genişletmeden, bir seçenek rota meta verilerini koruyan ayrı bir nesneye sahip olmaktır. Basit bir örnek:

this.route('list', { path: '/list' }); 
routeMetaData['list'] = 'Master List'; 

didTransition kanca meta veri erişmek için:

didTransition: function() { 
    var metadata = routeMetaData[this.routeName]; 
} 
İlgili konular