Javascript 淘汰赛:实施;聚焦;在列表中的对象上

Javascript 淘汰赛:实施;聚焦;在列表中的对象上,javascript,knockout.js,Javascript,Knockout.js,在我的根视图模型中,我有可观察的对象数组 我希望有一个下拉列表,允许用户选择该列表的元素(我们称之为current),然后能够将所选对象的一些属性绑定到某个编辑框 因此,对于用户来说,这应该看起来像他/她可以“聚焦”某个特定对象(使用组合框),然后编辑其属性 现在在我的html中,我有如下内容: <select data-bind="options: objects, optionsText: 'property', value: current, optionsCaption: 'Cho

在我的根视图模型中,我有可观察的
对象数组

我希望有一个下拉列表,允许用户选择该列表的元素(我们称之为
current
),然后能够将所选对象的一些
属性
绑定到某个编辑框

因此,对于用户来说,这应该看起来像他/她可以“聚焦”某个特定对象(使用组合框),然后编辑其属性

现在在我的html中,我有如下内容:

<select data-bind="options: objects, optionsText: 'property', value: current, optionsCaption: 'Choose...'"></select>
function ObjectViewModel(p) {
  var self = this;
  self.property = ko.observable(p);
}

function AppViewModel() {
  var self = this;
  self.objects = ko.observableArray([
      new ObjectViewModel("id1"),
      new ObjectViewModel("id2")
  ]);
  self.current = ko.observable();
}

ko.applyBindings(new AppViewModel());
但是,当我在下拉列表中选择值时,什么都不会发生

我怀疑我没有正确管理
AppViewModel
current
属性


在淘汰中实现这一点的正确方法是什么?

您的代码有两个问题:

  • 电流是可观察的,所以要评估值,必须使用“()”
  • 除非设置了current,否则无法访问“current().property”。因此,为了避免失败,请进行检查。 希望这会有所帮助
  • 函数ObjectViewModel(p){
    var self=这个;
    自身属性=可观察的ko(p);
    }
    函数AppViewModel(){
    var self=这个;
    self.objects=ko.observearray([
    新的ObjectViewModel(“id1”),
    新的ObjectViewModel(“id2”)
    ]);
    自电流=可观察的ko();
    }
    应用绑定(新的AppViewModel())
    
    您的代码有两个问题:

  • 电流是可观察的,所以要评估值,必须使用“()”
  • 除非设置了current,否则无法访问“current().property”。因此,为了避免失败,请进行检查。 希望这会有所帮助
  • 函数ObjectViewModel(p){
    var self=这个;
    自身属性=可观察的ko(p);
    }
    函数AppViewModel(){
    var self=这个;
    self.objects=ko.observearray([
    新的ObjectViewModel(“id1”),
    新的ObjectViewModel(“id2”)
    ]);
    自电流=可观察的ko();
    }
    应用绑定(新的AppViewModel())
    
    为了改进Amit Bhoyar的答案(我认为这是一件好事),我建议您将绑定,而不是if绑定,这样您就不必担心调用
    current().property来绑定值,使用绑定创建当前所选项目的正确上下文,并确保其中的html块仅使用当前可观察的true-y值进行渲染。我还将绑定更改为文本输入绑定,以获得对文本输入更改的更好的应用程序响应

    函数ObjectViewModel(p){
    var self=这个;
    自身属性=可观察的ko(p);
    }
    函数AppViewModel(){
    var self=这个;
    self.objects=ko.observearray([
    新的ObjectViewModel(“id1”),
    新的ObjectViewModel(“id2”)
    ]);
    自电流=可观察的ko();
    }
    应用绑定(新的AppViewModel())
    
    为了改进Amit Bhoyar的答案(我认为这是一件好事),我建议您将绑定,而不是if绑定,这样您就不必担心调用
    current().property来绑定值,使用绑定创建当前所选项目的正确上下文,并确保其中的html块仅使用当前可观察的true-y值进行渲染。我还将绑定更改为文本输入绑定,以获得对文本输入更改的更好的应用程序响应

    函数ObjectViewModel(p){
    var self=这个;
    自身属性=可观察的ko(p);
    }
    函数AppViewModel(){
    var self=这个;
    self.objects=ko.observearray([
    新的ObjectViewModel(“id1”),
    新的ObjectViewModel(“id2”)
    ]);
    自电流=可观察的ko();
    }
    应用绑定(新的AppViewModel())
    
    
    
    function ObjectViewModel(p) {
      var self = this;
      self.property = ko.observable(p);
    }
    
    function AppViewModel() {
      var self = this;
      self.objects = ko.observableArray([
          new ObjectViewModel("id1"),
          new ObjectViewModel("id2")
      ]);
      self.current = ko.observable();
    }
    
    ko.applyBindings(new AppViewModel());