Javascript KnockoutJS动态设置输入';s值

Javascript KnockoutJS动态设置输入';s值,javascript,knockout.js,scope,subscribe,parents,Javascript,Knockout.js,Scope,Subscribe,Parents,我试图使用knockoutjs数据绑定动态设置select输入的值。如果我只是在元素的属性中输入值:$parents[0]。选择了子类别,它就可以正常工作。但当我试图传递值时,它不起作用 我的看法是这样的- <div data-bind="with: QuestionFilter"> <form> <div data-bind="foreach: details"> <select data-bind="options: subc

我试图使用knockoutjs数据绑定动态设置select输入的值。如果我只是在
元素的属性中输入
值:$parents[0]。选择了
子类别,它就可以正常工作。但当我试图传递值时,它不起作用

我的看法是这样的-

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

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

  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()});
  });

ko.applyBindings({
类别=,
详细信息=可观察到的ko([])
});
我的JS看起来像这样-

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

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

  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()});
  });
功能问题过滤器(类别、详细信息){
var self=这个;
self.subcategories=ko.observatarray([]);
self.selectedSubcategory=ko.observable();
函数搜索(名称键,myArray){
对于(var i=0;i
除上述内容外,我还尝试使用
lastName:$parents[0].self.selectedSubcategory()
,带引号和不带引号。我还尝试过这样设置
元素的值:
值:$parents[0]。lastName
也有引号和
+
,但没有乐趣


需要任何想法或澄清吗?

不清楚您想要什么价值,因为
foreach
绑定中,您的范围是
细节的上下文。如果所需的属性位于
详细信息
对象中,只需将该属性作为
绑定即可。如果您想跳出一个级别,那么您可以使用
$parent
,显然
$root
将为您提供基本绑定模型。作为旁注,
firstName:self.subcategories()
似乎很奇怪。描述你想要达到的最终结果的概括性也有助于回答你的问题。谢谢你的关注。我希望能够通过
details.push()
$parent.self.selectedSubcategory()
传递到
值属性中。
details
应该表示什么,因为您正在执行不同结构对象的
.push
。由于您正在按
self.selectedSubcategory()
作为
lastName
推送,因此您可以使用该属性,但另一个
.push
只有
firstName
会导致问题。您可能还希望使
lastName
成为可观察的。
details
是可观察的数组。我知道我每次都需要使用firstName和lastName,但是我不能在第二个实例中添加lastName,直到它在第一个实例中起作用。我不确定让lastName成为一个可观察的对象会有多好,因为我只是想把一个值推到它里面。