【问题标题】:knockoutjs passing value when using foreach inside of with binding throws reference error在绑定中使用 foreach 时,knockoutjs 传递值会引发引用错误
【发布时间】:2014-06-21 20:59:51
【问题描述】:

我正在尝试使用 knockoutjs 动态创建选择输入。

我的视图是这样的 -

<div data-bind="with: QuestionFilter">
  <form>
    <div>
      <select data-bind="options: categories, optionsText: 'name', optionsValue: 'categoryID', value: selectedCategory">
      </select>
    </div>
    <div data-bind="foreach: details">
      <select data-bind="options: subcategories, optionsText: 'name', optionsValue: 'categoryID', value: selectedSubcategory">
      </select>
    </div>
  </form>
</div>  
<script type="text/javascript">
  ko.applyBindings({
    categories =  <?php echo json_encode($categories); ?>,        
    details = ko.observableArray([])       
  });
</script>

而我的 JS 看起来像这样 -

function QuestionFilter(categories, details) {
  var self = this;
  self.categories = ko.observableArray(categories);
  self.subcategories = ko.observableArray([]);
  self.selectedCategory = ko.observable();
  self.selectedSubcategory = ko.observable();
  self.superSubcategories = ko.observableArray([]);

  self.selectedCategory.subscribe(function(category) {
    function search(nameKey, myArray){
      for (var i=0; i < myArray.length; i++) {
        if (myArray[i].parentCategory_id === nameKey) {
          self.subcategories.push(myArray[i]);
        }
      }
    }   
    search(category, categories);
    details.push({ firstName: self.subcategories()});
  });

  self.selectedSubcategory.subscribe(function(subcategory) {
    function subsearch(nameKey, myArray){
      for (var i=0; i < myArray.length; i++) {
        if (myArray[i].parentCategory_id === nameKey) {
          self.superSubcategories.push(myArray[i]);
    }
      }
    }
   subsearch(subcategory, categories);
   details.push({ firstName: self.superSubcategories()});
  });

因此,变量selectedCategory 将按预期执行并触发self.selectedCategory.subscribe 中的函数。变量selectedSubcategory 不会按预期执行,而是会引发以下错误 - ReferenceError: selectedSubcategory is not defined。我认为这与在with 绑定中使用foreach 绑定有关,但我不确定。其他一切都按预期工作,我什至使用它成功地将几个对象添加到 details 数组中。

需要任何想法或澄清吗?

【问题讨论】:

  • 您的 ko.applyBindings 调用看起来不像是有效的语法。
  • 嗨,伊斯梅尔,我不得不把东西剪掉一点,所以它很适合这里。我可以向您保证它可以正常工作,因为上面代码中的所有内容都可以正常工作,除了使用 selectedSubcategory.subscribe 位。

标签: javascript data-binding knockout.js referenceerror


【解决方案1】:

看起来我没有在正确的上下文中访问 selectedSubcategory。在前面添加 $parents[0]. 可以得到预期的结果。所以它看起来像$parents[0].selectedSubcategory。奇怪的是,$parents 应该提供与$parents[0] 相同的上下文,但在这种情况下它不起作用......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2017-08-24
    • 2018-09-04
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多