KnockoutJS调用为foreach中的每个元素计算

时间:2014-07-04 09:50:55

标签: javascript html knockout.js

我有一个问题,我无法弄清楚.. 关于JSbin的例子:http://jsbin.com/wiwuwepe/1/edit

基本上,在

    <script id="QuestionTemplate" type="text/html">
    <div class="well">
        <div class="form-group">
            <div class="col-md-5">
                <p class="form-control-static" data-bind="text: QuestionText"></p>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-5">
                <!-- THIS IS WHERE I WANT COMPUTED FOR EACH SURVEYQUESTION -->
                <p class="form-control-static" data-bind="text: QuestionTypeTemplate"></p>
            </div>
        </div>
    </div>

QuestionTypeTemplate显示未定义,但模型为

     function SurveyQuestion(data) {
        var self = this;

        self.QuestionText = ko.observable(data.QuestionText);
        self.QuestionType = ko.observable(data.QuestionType);
        self.QuestionAnswers = ko.observableArray(data.QuestionAnswers);
        self.QuestionTypeTemplate = ko.computed(function () {
            /*
            if( self.QuestionType() == 0) {
              return "radio";
            } else if (self.QuestionType() == 1) {
              return "checkbox";
            }
            */
            return "This is what i want";
        }, self);
    }

请检查jsbin上的完整代码。只需在QuestionTemplate脚本/ html中取消注释1行。 当我将我的例子与http://knockoutjs.com/examples/cartEditor.html进行比较时,我真的找不到很大的区别,为什么会这样,以及为什么我的不行。

1 个答案:

答案 0 :(得分:2)

您的调查功能

而不是

self.SurveyQuestions = ko.observableArray(data.SurveyQuestions);

你需要使用这个

var questions = [];
for(i = 0 ; i<data.SurveyQuestions.length ; i++) {
   questions.push(new SurveyQuestion(data.SurveyQuestions[i]));
}
self.SurveyQuestions = ko.observableArray(questions);