2012-08-04 51 views
0

我正在努力学习淘汰赛,并提出了一个问题。Knockout JS if if else to display different html based on value

我想如果子句中使用劫,但似乎无法去解决它自己

我的剧本至今看起来像

<script> 
    var SimpleListModel = function (items) { 
     this.questionType = ko.observable(""); 
     this.items = ko.observableArray(items); 
     this.itemToAdd = ko.observable(""); 
     this.addItem = function() { 
      if (this.itemToAdd() != "") { 
       var qt = $("#question-type").data("kendoDropDownList"); 
       this.questionType(qt.value()); 
       console.log(qt.value()); 
       this.items.push(this.itemToAdd()); // Adds the item. Writing to the "items" observableArray causes any associated UI to update. 
       this.itemToAdd(""); // Clears the text box, because it's bound to the "itemToAdd" observable 
      } 
     }.bind(this); // Ensure that "this" is always this view model 
    }; 
    $(document).ready(function() { 
     ko.applyBindings(new SimpleListModel([])); 
    }); 
</script> 

我的HTML看起来像

 <button type="submit" class="btn pull-right" data-bind="enable: itemToAdd().length > 0"><i class="icon-plus"></i>Add Question</button> 
         <div id="questions" data-bind="foreach: items"> 
          <div class="question-item"> 
           <label data-bind="text: $data" class="q-label"></label> 
           <textarea placeholder="Answer" class="q-answer"></textarea> 
           <!-- ko if: questionType()==="ABC" --> 
              Display ABC 
           <!-- /ko --> 
           <!-- ko if: questionType()==="DEF" --> 
              Display DEF 
           <!-- /ko --> 
          </div> 
          <div class="clear"></div> 
         </div> 

我需要做什么,以获得ko如果:questionType正常工作?

我已经更新了questionType的设置的建议,但是我正在一个错误Uncaught Error: Unable to parse bindings. Message: ReferenceError: questionType is not defined; Bindings value: if:questionType()==="Comment"

+0

'this.questionType = qt.value();'是不是要设置观察到的值的有效方法。你需要传递新的值作为参数:'this.questionType(qt.value());' – Tyrsius 2012-08-04 04:57:06

回答

3

由于questionType是可观察到的,你需要调用它作为不带参数的函数来检索它的值。

所以,你if语句需要看起来像:

<!-- ko if: $parent.questionType() === "ABC" --> 
    Display ABC 
<!-- /ko --> 
+0

你也想像这样设置'this.questionType(qt.value());'。 – 2012-08-04 03:14:22

+0

Thanks guys,@RP Niemeyer我试过你的建议,但是我得到一个错误未捕获的错误:无法解析绑定。 消息:ReferenceError:questionType未定义; 绑定值:if:questionType()===“ABC” – 2012-08-04 03:37:00

+0

看起来您的'questionType'不在每个项目上,而是在根级别上。你的'if'块在'items'的循环中。所以,你需要像'$ parent.questionType()'或'$ root.questionType()'或'$ root.questionType()' – 2012-08-04 10:16:18