Dojo로 약 10 분 만에 해결할 수있는 간단한 문제에 대해 약 10 일을 소비했습니다. 나는 간단한 것을 놓치기를 바란다. 나는 Ember를 사용하고자하는 놈이다.Ember Populating EmberData를 사용하여 종속 컨트롤러에서 선택 지연로드
EmberData를 사용하여 다른 컨트롤러의 데이터로 Ember.Select의 내용을 채우려고합니다. 사례를 고려해보십시오. 원료 성분에 대해 FoodGroup을 선택할 수 있습니다.
RawIngredientController와 FoodGroupsController 사이에 'needs'의존성을 사용하고 내용에 바인딩하는 것이 명확하게 보였습니다.
이것은 성공에 가장 가깝고 나에게 충분하지 않은 것으로 보입니다. 나는 설명 할 것입니다.
<script type="text/x-handlebars" data-template-name="rawIngredients">
{{#each item in controller itemController="rawIngredient" }}
{{! view Ember.Select
contentBinding="controllers.foodGroups.content"
optionValuePath="content.id"
optionLabelPath="content.name"
prompt="select Food Group" }}
{{/each}}
</script>
Cook.RawIngredientController = Ember.ObjectController.extend({
isEditing: false,
needs: ['foodGroups'],
...
});
Cook.RawIngredient = DS.Model.extend({
name: DS.attr('string'),
nameKey: DS.attr('string'),
foodGroup: DS.belongsTo('Cook.FoodGroup')
});
Cook.FoodGroupsRoute = Ember.Route.extend({
setupController: function(controller) {
controller.set('content', Cook.FoodGroup.all()); // have also tried find()
}
});
Cook.FoodGroup = DS.Model.extend({
name: DS.attr('string'),
nameKey: DS.attr('string')
});
실제로 모든 RawIngredients에는 오류가 없지만 FoodGroups 저장소가 비어 있기 때문에 Selects는 비어 있습니다. 저장소를로드하고 RawIngredients로 돌아가는 FoodGroups 화면으로 이동하여 선택 항목에 FoodGroups가 채워집니다.
이 문제에 대한 여러 게시물을 보았지만 EmberData가 관련되어있을 때 문제를 충분히 해결하지 못했습니다. pangratz http://jsfiddle.net/pangratz/hcxrJ/의 영리한 예제처럼 포스트로드 된 예제가 많이 있지만, EmberData를 사용하여 콘텐츠를 지연로드하지 못했습니다.
이 게시물이
은 Ember.js: Ember.Select valueBinding and lazy loading아주 가까이 내가이 일을 가져올 수 없습니다 관찰자를 사용하여 해결 방법을 포함하고 있습니다. FoodGroup 데이터의 실제로드를 호출하지 않는 바인딩에 바인딩을 종료했습니다. 다음은 예입니다, 아마 최고의 (20 + 아마의) 하나 개의 시도 :
Cook.FoodGroupsController = Ember.ArrayController.extend({
...
// NOTE: This seems redundant
values: function() {
return this.get('content');
}.property(),
...
});
Cook.RawIngredientController = Ember.ObjectController.extend({
...
// this should be the instance; also tried the object name FoodGroupsController....also tried using needs + 'controllers.foodGroups.values' in the binding
allFoodGroups: Ember.Binding.oneWay('Cook.foodGroupsController.values'), '
/*
// ... or rather ....??
allFoodGroups: function() {
this.get('foodGroupsBinding');
},
foodGroupsBinding: "Cook.foodGroupsController.values",
*/
...
});
{{view Ember.Select
contentBinding="allFoodGroups"
optionValuePath="content.id"
optionLabelPath="content.name"
prompt="select Food Group" }}
하지만 'allFoodGroups'을 말하는 것이 오류는 바인딩이 아닌 Ember.Array를 제공하고 있습니다. 소용돌이 치는 명명 규칙의 바다에서 길을 잃은 것 같습니다. 내 다른 시도를 보여줄 수 있지만 정의되지 않은 내용의 오류가있었습니다.
어. 따라서 약간의 백업은 ... 적어도 필자의 독창적 인 솔루션을 사용하고 FoodGroups 저장소를 미리로드하면 해결 방법이 제공되지만 EmberData가 프로그래밍 방식으로 데이터를로드하고로드 할 수없는 것처럼 보입니다. RawIngredientController에서 init() 함수를 사용해 보았습니다.
init: function() {
var item = this.get('controllers.foodGroups.content.firstObject');
},
그러나 올바른 조합을 찾지 못했습니다. 그리고 비록 그렇게해도 RawIngredients (또는 FoodGroups?)의 단일 참조를 사용하지 않고 각 RawIngredient에 대한 참조를 설정하기 때문에 잘못된 접근 방법 인 것처럼 보입니다. 그러나 다른 주제와 같습니다.
이 http://jsfiddle.net/jockor/Xphhg/13/
사람이 다른 컨트롤러에 정의 된 사용 저장소를로드 할 수있는 효율적이고 효과적인 방법을 알아 냈나요 문제를 설명하는 바이올린에서 내 시도에 EmberData 사용되는 관련 내용을 게으른 -로드?
고맙습니다. 이미 답변을 통해 배웠습니다. 업데이트를 기반으로 내 바이올린을 업데이트했습니다. http://jsfiddle.net/jockor/Xphhg/17/ 이제 ApplicationController.init() 내에서 국가 경로를 프로그래밍 방식으로 호출하여 응용 프로그램 컨트롤러를 클릭하지 않고 미리로드하려고합니다. 링크. 난 몇 가지 방법을 시도하고 오른쪽에 맞지 않았어 - 일반적으로/국가를 호출하는 라우터를 메시지를 보내려고 노력하고 있지만 아무런 문제가 '아니오 처리기'오류가 점점. 어떤 아이디어? – user2003699
하나의 버전이 작동합니다 (방법 4), 업데이트 된 바이올린이 있습니다 - http://jsfiddle.net/Xphhg/23/. 그것이 가장 좋은 패턴인지는 모르겠지만 나에게 꽤 합리적으로 보입니다. – user2003699