2013-05-27 2 views
0

나는이 모델이 있습니다Ember.js "각"문제는 Ember.js에서

App.Product = DS.Model.extend({ 
    name: DS.attr("string"), 
    ean: DS.attr("number"), 
    price: DS.attr("number"), 
    units: DS.attr("number"), 
    product_states: DS.hasMany('App.ProductState') 
}); 

App.ProductState = DS.Model.extend({ 
    price: DS.attr("number"), 
    units: DS.attr("number"), 
    product_id: DS.belongsTo('App.Product'), 
    user_id: DS.belongsTo('App.User'), 
    created: DS.attr("date") 
}); 

을 그리고 나는이 각이 : 날이 오류를 제공

 {{#if view.product}} 
      {{#each item in App.ProductState.find({ product_id: view.product.id})}} 
       <tr> 
        <td>{{view.product.name}}</td> 
        <td>{{item.price}}</td> 
        <td>{{item.units}}</td> 
        <td>{{item.created}}</td> 
       </tr> 
      {{/each}} 
     {{/if}} 

(크롬) :

Uncaught Error: Parse error on line 6: 
...in App.ProductState.find({ product_id: v 
-----------------------^ 
Expecting 'ID', got 'INVALID' 

페이지를로드 할 때이 오류가 발생합니다. 로드 할 때 view.product는 NULL로 설정됩니다. 각각은 jQuery UI 대화 상자 안에 있으며 그 내용은 버튼의 결과로 view.set("product",product);을 통해 동적으로 설정됩니다.

제품 오브젝트 설정은 대화 상자에서 제품 변수를 인쇄하고 싶을 때 제대로 작동하지만 각각을 사용할 때 충돌하기 때문에 작동합니다.

내 생각에 Ember는 if 조건을 무시하고 오류를 나타내는 각주기를 실행하려고합니다. 다른 옵션은 방금 find 메소드를 잘못 사용하고 있다는 것입니다 (btw Ember 가이드는 모델 관계를 설정하는 방법을 알려주지 만 내가 아는 한 어떤 효과가 있고 어떻게 제대로 사용하는지 언급하지 않습니다).

문제를 해결할 수 있습니까? 어쩌면 템플릿이나 무언가 대신 자바 스크립트 함수로 각각을 실행하는 것과 같은 것일까 요?

+0

프레임 워크를 사용하여 컨트롤러에 데이터를로드 한 다음보기를 사용하여 표시해야합니다. – harn145

+0

미안하지만, 너무 일반적입니다. – Ragnar

+0

확실히, Ember.js 인 프레임 워크의 핵심입니다. 코드에 대한 세부 정보가 없으면 내가 할 수있는 최선입니다. 예 : 라우팅을 사용합니까? 그렇다면 해당 경로의 모델을 설정합니까? 그렇지 않은 경우 응용 프로그램보기는 어떻게 정의됩니까? 어떤 다른 요소들을 보여주고 있습니까? 뷰는 컨트롤러를 기반으로하고 컨트롤러의 'content'는 채우기 위해 사용하는 찾기 유형 또는 인스턴스화 방법에 따라 하나 이상의 레코드 (모델 인스턴스)를가집니다. 그래서 ObjectController 또는 ArrayController). – harn145

답변

2

javascript를 핸들 막대 템플릿 (보기)에 넣을 수 없습니다. http://emberjs.com/guides/templates/writing-helpers/

를 특정 예에서 product_states 이후 Product의 속성은 그냥 product_states에 액세스 할 수 있습니다 : 당신은 어떤 특별한 프리젠 테이션 처리를 할 바로 자바 스크립트 코드까지 사용할 필요가 있다면 당신은 여기에 포함되는 핸들 도우미를 이용해야한다 속성을 직접 사용하고 ember/ember 데이터는 요청할 때 데이터를로드 한 다음 서버에서 데이터가 다시 돌아 오는 시점을 업데이트합니다.

{{#if view.product}} 
    {{#each item product.product_states)}} 
     <tr> 
      <td>{{view.product.name}}</td> 
      <td>{{item.price}}</td> 
      <td>{{item.units}}</td> 
      <td>{{item.created}}</td> 
     </tr> 
    {{/each}} 
{{/if}} 

참고 ember의 규칙은 camelCased 속성을 갖는 것입니다. 그러므로 Product 모델은 productStates 속성이어야하고 ProdcutState 모델은 userId 속성이어야합니다. 확실하지 않은 경우 이것이 당신의 json의 materialization을 망칠 것인가?

희망이 도움이됩니다.

+0

큰 통찰력을 가져 주셔서 감사하지만 해결책은 여전히 ​​나던데 어떻게 든 여전히 같은 오류가 발생합니다 : 잡히지 않은 오류 : 6 행의 구문 분석 오류 : ... view.product의 tem.product_states)}} -----------------------^ 'ID'가 필요합니다. 'INVALID'가 표시됩니다. – Ragnar

+0

로딩 할 때 반복해야 할 수도 있습니다. 페이지 및이 오류가 발생하면 사용자가 단추를 클릭 할 때까지 올바른 개체를 모르기 때문에 view.product NULL입니다. – Ragnar