我只是从Knockout.js开始,并且有关于动态HTML的查询。我正在创建动态问卷。这有;主问卷视图模型,其中包含...一个ObservableArray of Pages,其中包含...一个ObservableArray of Questions,其中包含...一组选项。我已经使用$ .map函数映射了我的选项,例如;this.options = $.map(questionOptions, function(text) { return new Option(text) });我正在ViewModel中动态生成一些html,但是当我尝试将其连接成类似一组单选按钮时,就说了这句话;var htmlContent = '';ko.utils.arrayForEach(_self.options, function (item) { htmlContent += '<input type="radio" name="' + ko.utils.unwrapObservable(_self.questionNumber) + '" data-bind="attr: {value: value}, checked: $root.selected" />\r\n'; htmlContent += '<span>\r\n'; htmlContent += item.optionText; //htmlContent += ko.utils.unwrapObservable(item.optionText); // Doesn't Work //htmlContent += item.optionText(); // Doesn't Work htmlContent += '</span>\r\n'; });return htmlContent;我最终得到了一堆;[object Object]我尝试了几种替代方法,但对去哪里却有些困惑。我不确定如何使用模板,因为我打算将文本框,单选按钮,下拉菜单,列表等一起使用。但是也许我的知识就是这里缺少!这是带有一些示例代码的jsFiddle;http://jsfiddle.net/PGallagher69/wA6mQ/21/有任何想法吗? 最佳答案 您的optionText确实是一个Option对象。尝试:htmlContent += item.optionText.optionText;更新:真正的问题在这里:function PagesViewModel(pageNo, pageHeader, questions) { this.pageNumber = ko.observable(pageNo); this.pageHeaderText = ko.observable(pageHeader); this.questionItems = ko.observableArray($.map(questions, function (n) { return [new QuestionViewModel(n.questionType, n.questionNumber, n.questionText, n.pointsBudget, n.options)] }));}创建PagesViewModel时,questions参数已经是QuestionViewModel对象的数组,并且通过给this.questionItems分配自定义函数,可以重新创建QuestionViewModel,并将其传递已经是n.options对象的数组,因此再次用Option对象重新包装它,这就是为什么您最终将需要Option而不是简单的item.optionText.optionText的原因。尝试这个:function PagesViewModel(pageNo, pageHeader, questions) { this.pageNumber = ko.observable(pageNo); this.pageHeaderText = ko.observable(pageHeader); this.questionItems = ko.observable(questions);}
10-05 20:45
查看更多