Javascript ObservableArray可在淘汰JS中选择选项

Javascript ObservableArray可在淘汰JS中选择选项,javascript,knockout.js,Javascript,Knockout.js,我想通过knockout js将array转换为select选项,我知道这种情况下有3种方法,但这些方法都不能完全满足我的需要,我想要的是: 设置默认选项选择一个选项 获取选定值 设置选项的属性 每个方法都有自己的问题,但最后一个方法有默认选项,可以获得选定的值,但不能设置attr,知道吗 方法1: 错误: 未捕获错误:绑定“值”不能用于虚拟 元素 状态:不工作 函数myfunc(){ var self=这个; 自我估计=ko.observearray([]); self.selectedVa

我想通过knockout js将array转换为select选项,我知道这种情况下有3种方法,但这些方法都不能完全满足我的需要,我想要的是:

  • 设置默认选项
    选择一个选项
  • 获取选定值
  • 设置选项的属性
  • 每个方法都有自己的问题,但最后一个方法有默认选项,可以获得选定的值,但不能设置
    attr
    ,知道吗

    方法1:

    错误:

    未捕获错误:绑定“值”不能用于虚拟 元素

    状态:不工作

    函数myfunc(){
    var self=这个;
    自我估计=ko.observearray([]);
    self.selectedValue=ko.observable();
    var obj=[{
    方法标题:“胡说八道”,
    价格:“1000”
    },
    {
    方法标题:“胡说八道2”,
    价格:“2000”
    }
    ];
    自我评估(obj);
    self.selectedValue.subscribe(函数(值)){
    警报(值);
    });
    }
    ko.applyBindings(新的myfunc())
    
    
    选择一个选项
    
    您只需对第三种方法稍加修改即可

    从淘汰官方文档中,您可以使用optionsAfterRender参数。我已经修改了你的代码。看看是否有帮助

    函数myfunc(){
    var self=这个;
    自我估计=ko.observearray([]);
    self.selectedValue=ko.observable();
    var obj=[{
    方法标题:“胡说八道”,
    价格:“1000”,
    href:“href 1”,
    标题:“转到href 1”
    },
    {
    方法标题:“胡说八道2”,
    价格:“2000”,
    href:“href 2”,
    标题:“转到href 2”
    }
    ];
    self.setoptionatr=函数(选项,项){
    如果(项目)
    {
    applybindingstoode(选项,{attr:{href:item.href,title:item.title},item);
    }            
    }
    自我评估(obj);
    self.selectedValue.subscribe(函数(值)){
    警报(值);
    });
    }
    ko.applyBindings(新的myfunc())
    
    您只需对第三种方法稍加修改即可

    从淘汰官方文档中,您可以使用optionsAfterRender参数。我已经修改了你的代码。看看是否有帮助

    函数myfunc(){
    var self=这个;
    自我估计=ko.observearray([]);
    self.selectedValue=ko.observable();
    var obj=[{
    方法标题:“胡说八道”,
    价格:“1000”,
    href:“href 1”,
    标题:“转到href 1”
    },
    {
    方法标题:“胡说八道2”,
    价格:“2000”,
    href:“href 2”,
    标题:“转到href 2”
    }
    ];
    self.setoptionatr=函数(选项,项){
    如果(项目)
    {
    applybindingstoode(选项,{attr:{href:item.href,title:item.title},item);
    }            
    }
    自我评估(obj);
    self.selectedValue.subscribe(函数(值)){
    警报(值);
    });
    }
    ko.applyBindings(新的myfunc())
    
    您的第一种方法最有希望,因此我已经纠正了这一点。您不需要在
    foreach
    循环中使用
    绑定。它必须在
    中使用,并且工作正常

    函数myfunc(){
    var self=这个;
    自我估计=ko.observearray([]);
    self.selectedValue=ko.observable();
    var obj=[{
    方法标题:“胡说八道”,
    价格:“1000”
    },
    {
    方法标题:“胡说八道2”,
    价格:“2000”
    }
    ];
    自我评估(obj);
    self.selectedValue.subscribe(函数(值)){
    console.log(值);
    });
    }
    ko.applyBindings(新的myfunc())
    
    
    选择一个选项
    
    您的第一种方法最有希望,因此我已经纠正了这一点。您不需要在
    foreach
    循环中使用
    绑定。它必须在
    中使用,并且工作正常

    函数myfunc(){
    var self=这个;
    自我估计=ko.observearray([]);
    self.selectedValue=ko.observable();
    var obj=[{
    方法标题:“胡说八道”,
    价格:“1000”
    },
    {
    方法标题:“胡说八道2”,
    价格:“2000”
    }
    ];
    自我评估(obj);
    self.selectedValue.subscribe(函数(值)){
    console.log(值);
    });
    }
    ko.applyBindings(新的myfunc())
    
    
    选择一个选项
    
    请注意,在Knockout看到注释之前,浏览器可能会从
    元素中删除注释。例如IE 8就是这样做的。请注意,在Knockout看到注释之前,浏览器可能会从
    select
    元素中删除注释。例如IE8就是这样做的。