2012-12-10 3 views
0

나는 (ember에) 새롭고 검색 중심의 Ember App w/Ember-data도 만들려고 노력하고있다. 나는 검색 문자열을 기반으로 즉석에서 URL을 변경하고 데이터가 자동으로 변경되어야합니다. 그것을하는 방법?ember-data에서 DS.Model url을 변경하는 방법은 무엇입니까?

이 내 작동하지 않는 코드 :

Emapp.Data = DS.Model.extend({ 
first_name: DS.attr('string') 
}).reopenClass({ 
    url: Emapp.MyURL.get('url') 
}); 

Emapp.MyURL = Em.Object.create({ 
    urlParam: 'John', 
    url: function() 
    { 
    return 'emb/data.php?id=%@'.fmt(this.get('urlParam')); 
    }.property('urlParam') 
}); 

내가 실행합니다. emapp.MyURL.set ('urlParam', 'Adams'). 나는 검사하여 URL이 'Adams'로 변경된 것을 볼 수 있습니다. 그러나 데이터는 다시 가져 오지 않습니다.

편집 : emapp는 -> (루디 - 안젤라 지적) Emapp 당신이 'URL'속성을 계산 된 속성을 만든 것처럼

답변

1

, 엠버이 값 때 urlParam이 변경 갱신을 담당한다. 그것이 당신이 엠버에게 여기에서하도록 지시 한 것입니다 (그리고 그것은 분명히 올바르게하고 있습니다). 하지만 여기서 원하는 것은 'urlParam'속성에서 가져 오기 작업을 트리거하는 변경 사항입니다. 이 경우 해결책은 urlParam을 관찰하는 별도의 객체를 만드는 것이며 'urlParam'값이 변경되면 작업을 수행합니다. 이 라인을 따라 뭔가 :

emapp.watcher = Ember.Object.create({ 
    valueBinding: "emapp.MyURL.urlParam", 

    observer: function() { 
     console.log("urlParam has changed:"); 
     // perform your fetch here 
    }.observes("value"), 
}); 

참고 : 나는 네임 스페이스 (대신 emapp 오히려 Emapp)를 대문자로하는 요구 사항이 생각했다.

+0

변경 사항을 확인할 수 있습니다. 이제 데이터를 다시로드하려고 할 때 (아무리 생각해도). connectOutlet ('home', router.get ('store')) {index : Em.Route.extend ({ route : '/', } "Emapp.MyURL.urlParam" 관찰자 : 함수() { ) .findAll (Emapp.Data)) }}이 ) '는'I 마찬가지로 Emapp.watcher Em.Object.create = ({ valueBinding 구현 console.log ("urlParam has changed"); BugUser.get ('router'). homeController.store.findAll (BugUser.Data); } .observes ("value") })'. 아무 일도 일어나지 않습니다. – hashg

+0

덜 복잡한 방법이 있습니까? – hashg

관련 문제