2013-10-31 3 views
0

혼란스러워. 내가 모델을 다음 한 , ATTR 태그 및 비품에 대한 변환 :배열의 항목 렌더링

Tracker.Story = DS.Model.extend({ 
    title: DS.attr('string'), 
    tags: DS.attr('array', []), 
}); 

DS.ArrayTransform = DS.Transform.extend({ 
deserialize: function(serialized) { 
    return serialized; 
}, 
serialize: function(deserialized) { 
    return deserialized.split(','); 
} 
}); 

Tracker.register("transform:array", DS.ArrayTransform); 

Tracker.Story.FIXTURES = [ 
{ 
    id: 1, 
    title: "Some story", 
    tags: ["tag1", "tag2", "tag3"], 
} 

및 템플릿 그건

{{#each itemController="story"}} 
    {{title}} 
    {{#each tag in tags}} 
     {{tag}} 
    {{/each}} 
{{/each}} 

일정에서 이야기를 위해 좋은 작동합니다.

{{input type="text" value=tags}} 

올바르게 변환 작동 ([1,2,3] 예를 들면, "1,2,3"부터) 문자열 배열을 반환 : 제가 입력 필드와 같은 정의 인터페이스를 통해 새로운 스토리를 첨가.

그러나 실패 다음 메시지와 함께 추가 이야기 태그를 렌더링 :

어설 션 실패 : 배열해야합니다 이상 루프 값 #each있다. 417

catch되지 않은 형식 오류 : 개체 1있는 방법 'addArrayObserver'ember.js이 없습니다 : 22,976

catch되지 않은 오류 : 당신은 1 ember.js 통과 당신이 뷰를 발생 않았다 뭔가 후 다시 렌더링 렌더링되었지만 DOM에 삽입되기 전에 렌더링되었습니다.

답변

2

입력 도우미는 항목을 배열로 저장하는 것을 지원하지 않습니다. 그것이 입력 필드에 올바르게 표시되는 이유는 toString이 객체에서 호출되고 배열의 toString이 1,2,3 등이기 때문입니다. 입력 필드를 변경하면 기본 배열을 멀리 날려 버리고 다음과 같이 저장합니다. 문자열 1,2,3.

변형은 기본 모델에 대한 모든 가져 오기/설정이 아니라 모델로드/저장 중에 만 실행됩니다.

입력 필드를 다른 속성과 연결하는 것이 가장 좋으며 해당 필드가 변경되면 기본 필드가 배열로 업데이트됩니다.

이런 식으로 뭔가가 작동합니다 :

http://emberjs.jsbin.com/EMapanu/3/edit

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
    return ['red', 'yellow', 'blue']; 
    }, 
    setupController: function(controller, model){ 
    this._super(controller, model); 
    controller.set('fakeModel', model); 
    } 
}); 

App.IndexController = Em.ArrayController.extend({ 

    modelUpdater: function(){ 
    var fm = this.get('fakeModel'); 
    if(!(fm instanceof Array)){ 
     fm = (this.get('fakeModel') || "").split(','); 
    } 
    this.set('model', fm); 
    }.observes('fakeModel') 
});