2014-06-26 9 views
5

Oldukça basit bir Ember.js uygulamasına sahibim. bana hata veriyor ben this.transitionTo dediğimiz bir İç görünüm:Ember.js: Yakalanmamış TypeError: Geçişin undefined özelliğini 'enter' okuyamazsınız.

Yakalanmayan TypeError: okuma özelliği 'enter' Can not hata currentState tanımsız hattı 24596, at ember.js olduğunu tanımsız

arasında

window.Plan = Ember.Application.create({}); 

     Plan.Router = Ember.Router.extend({ 
     location: 'hash' 
    }); 

    Plan.IndexController = Ember.ObjectController.extend({ 

    }); 


    Plan.Router.map(function() { 
     this.route('application', { path: '/' }) 
     this.route('index', { path: "/:current_savings/:monthly_deposit/:time_horizon" }); 
    }); 

    Plan.ApplicationRoute = Ember.Route.extend({ 
     redirect: function(){ 
      this.transitionTo('index', 200, 200, 200); 
     } 
    }) 

    Plan.IndexRoute = Ember.Route.extend({ 
     model: function(params) { 
      var result = this.store.find('calculation', params).then(function(data) { 
       return data.content[0]; 
      }); 

      return result; 
     } 
    }); 

    Plan.CurrentSavingsTextField = Ember.TextField.extend({ 
     focusOut: function() { 
      this.transitionTo('index', 150, 200, 200); 
     } 
    }); 

    Plan.MonthlyContributionTextField = Ember.TextField.extend({ 
     focusOut: function() { 
      this.transitionTo('index', 150, 200, 200); 
     } 
    }); 

    Plan.TimeHorizonTextField = Ember.TextField.extend({ 
     focusOut: function() { 
      this.transitionTo('index', 150, 200, 200); 
     } 
    }); 

Plan.Calculation = DS.Model.extend({ 
    target_goal: DS.attr('number'), 
    target_return: DS.attr('number'), 
    expected_return: DS.attr('number'), 
    downside_probability: DS.attr('number') 
}); 

Plan.ApplicationAdapter = DS.RESTAdapter.extend({ 
    namespace: 'plan/' + window.targetReturnId 
}); 

HTML:

<script type="text/x-handlebars" data-template-name="index"> 

    <div> 
     <div>Starting Balance: {{view Plan.CurrentSavingsTextField size="10"}}</div> 
     <div>Monthly Contribution: {{view Plan.MonthlyContributionTextField size="10"}}</div> 
     <div>Time Horizon: {{view Plan.TimeHorizonTextField size="10"}}</div> 
    </div> 
    <div> 
     <span>Plan Goal: {{target_goal}}</span> 
     <span>Required Return: {{target_return}}</span> 
     <span>Exp Return: {{expected_return}}</span> 
     <span>Downside Probability: {{downside_probability}}</span> 
     <span>Time Horizon: {{time_horizon}}</span> 
    </div> 

</script> 

İşte benim app alakalı bölümlerdir

Bu yanıttır:

{ 
    "calculations":[ 
     { 
     "id":10, 
     "target_goal":3107800.0, 
     "target_return":0.089, 
     "expected_return":0.0708, 
     "downside_probability":0.0489 
     } 
    ] 
} 

uygulaması Ben metin alanının dışına odak kadar, sonra ben hata alıyorum beklendiği gibi çalışır.

Kor: 1.5.1

Kor veri: 1.0.0-beta.8.2a68c63a

Gidon: 1.2.1

jQuery: 1.11.1

+0

İlgili kodun tamamı bu kodun çalışmasına neden olmaz. http://emberjs.jsbin.com/OxIDiVU/745/edit Model nasıl görünüyor, sunucunun yanıtı nasıl görünüyor? Hangi adaptör, serializer? Neye benziyorlar? – Kingpin2k

+1

@ kingpin2k Tanımlanmamış hatayı burada jsbininize alıyorum. Chrome Version 35.0.1916.153 'CurrentSavingsTextField'' focusOut' yöntemi hataya neden oluyor. –

cevap

6

Geçmiş kingpin2k tamamen idi Yanlış, görüşten geçiş hakkındaki ifadeyi kaçırdım. Özür dilerim. Bir bileşeninden

transitionTo

(herhangi bir belgelerinden en azından ben bulabildiğim) Sen bileşenin dışında bir işlem gönderebilir ve denetleyici veya rota bu bilgileri yakalama isteyeceksiniz

desteklenmez.

Plan.CurrentSavingsTextField = Ember.TextField.extend({ 
    focusOut: function() { 
     this.sendAction('go', 199, 200, 201); 
    } 
}); 


Plan.IndexRoute = Ember.Route.extend({ 
    model: function(params) { 
     var result = this.store.find('calculation', params); 
     //if you just wanted the first object 
    // result.then(function(collection){ 
    // return collection.get('firstObject'); 
    // }); 
     return result; 
    }, 
    actions:{ 
    go: function(a, b, c){ 
     console.log('transition'); 
     this.transitionTo('index',a,b,c); 
    } 
    } 
}); 

http://emberjs.jsbin.com/OxIDiVU/749/edit

+0

{{view Plan.CurrentSavingsTextField go = 'go'}} açıklayabilir misiniz? Bu kontrolör eylemine bir referansı iletiyor mu? Görünümün kendi ayrı kontrolörüne sahip olduğundan bu durumun mantıklı olduğunu düşünüyorum. –

+0

, bileşenden geçen işlemin kaldırılmasıdır. 'sendAction (' go ') 'dediğinizde,' go' adlı eylem adına çevrilecek ve ana denetleyiciye, ardından rota ağacına geçirilecek. Birden fazla bileşene sahip olduğunuz ve bileşenin dışındaki farklı eylemlere bağlanmanızı istediğinizde veya bileşenden bir eylemi göz ardı etmek istiyorsanız gerçekten işe yaramayacağınız zaman gerçekten kullanışlıdır. – Kingpin2k

-1

Bu soru oldukça eskidir ama hala kadarıyla benim googling gitti olarak cevaplanmamış görünüyor. etrafında oynadıktan sonra (Kor 0.13.0) Bir bileşenin içinden çalışmak için aşağıdaki kodu almak başardı:

this.get('_controller').transitionToRoute('index', 150, 200, 200); 

_ denetleyicisi Infront kesmek biraz gibi hissediyorum ve bu kadar olmamalı gerçekten kullanıcı kodu için erişilebilir. get('controller'), infact tamamen farklı bir şey döndürür.

Bir görünümden (Bileşen) gezinmenin en iyi uygulama olmadığını kabul ediyorum, ancak kullanım durumum için, denetleyiciye çağrı yapmaktan ziyade bunun mükemmel olduğu grafikler için bir gösterge panosuna giren birkaç bileşenim var. eylemler. Her şeyin tek bir bileşen içinde izole edilmesine yardımcı olur.

+0

Ember'i aylardır kullanmadım, bu yüzden bunu kontrol edeceğim. Eğer bunun doğru olup olmadığını söylemek isteyen varsa, cevap olarak kabul edeceğim –