2014-04-06 143 views
1

到目前爲止,它看起來像Ember不像我預期的那樣工作,我希望我錯過了一些東西。我需要做的是迭代我的模型,由數組和對象組成的一組JSON,並構建出一個表單。當用戶標記複選框時,控制器更新模型。ember.js屬性綁定和事件對象

以下是我想要的工作......

<form {{action 'answerSupplied'}}> 
    {{#each model.questions}} 
     <h3>{{text}}</h3> 

     {{#each answers}} 
      {{input type='../type' answerId='id' data-bind-questionNum='../id' text}} 
     {{/each}} 

    {{/each}} 
    </form> 

以下是我能得到接近......

<form {{action 'answerSupplied' this}}> 
    {{#each model.questions}} 
     <h3>{{text}}</h3> 

     {{#each answers}} 
      {{formbuilder ../type id ../id text}} 
     {{/each}} 

    {{/each}} 
    </form> 
================== 
Handlebars.registerHelper('formbuilder', function(type, id, qnum, text, options) 
{ 
// console.log(options); 

    var q_type = options.contexts[0][type], 
     a_id = options.contexts[1].id, 
     q_number = options.contexts[0][qnum], 
     a_text = options.contexts[1].text; 

     return new Handlebars.SafeString(
       '<input type='+ q_type +' id='+ a_id +' name='+ 
        q_number +'>'+ a_text + '</input><br/>' 
     ); 
    } 
}); 

最大的問題機智,這是,我無法確定哪個元素被點擊是因爲我沒有訪問事件對象的權限。

我可以手動將動作綁定到「data-ember-action」之類的東西,並傳入參數嗎?或者,這是否遠離Ember方式?

== ==更新

這裏的上述JSFiddle,通過傳遞參數給Action提高。事件傳播似乎在Action中停止,導致輸入未正確標記。單選按鈕鬆散了他們的分組,並且複選框沒有被檢查。

回答

2

灰燼可以很容易地處理你在這裏做什麼。首先保留範圍並生成命名的每個循環更容易。

<form {{action 'answerSupplied'}}> 
    {{#each question in model.questions}} 
     <h3>{{question.text}}</h3> 

     {{#each answer in question.answers}} 
      {{input type=question.type answerId=answer.id data-bind-questionNum=question.id placeHolder=answer.text}} 
     {{/each}} 

    {{/each}} 
    </form> 

你可能不得不在你的輸入語句周圍做一些if語句。

http://emberjs.jsbin.com/zofoqeje/1/edit

+0

謝謝。這有很大幫助。我認爲它應該以這種方式工作。我將無法測試,直到下班後,但它看起來像數據綁定屬性是要傳遞給操作?如果這樣的話,我會對Ember非常滿意。 – nullsteph

+0

我能夠得到更接近和傳遞參數與這個代碼在名爲'每個'循環:' {{answer.text}}
'...但是,事件被困在控制器中,複選框和單選按鈕不會被標記。我如何讓事件繼續冒泡並檢查複選框? – nullsteph