【问题标题】:knockoutjs change binding at runtimeknockoutjs 在运行时更改绑定
【发布时间】:2017-09-23 08:28:35
【问题描述】:

请用这个简单的代码来说明这个案例:

<select id="se">
  <option value="0">EN</option>
  <option value="1">FR</option>
  <option value="2">AR</option>
  <option value="3">SP</option>
</select>  
<input id="inp"  data-bind='textInput: DESCRIPTION_FR' />


<script src="../Scripts/jquery-1.9.1.min.js"></script>
<script src="../Scripts/knockout-3.4.0.js"></script>

<script type="text/javascript">
  var PRDVM = function () {
      var self = this;
      self.ID = ko.observable(0);
      self.DESCRIPTION_FR = ko.observable('FR');
      self.DESCRIPTION_EN = ko.observable('EN');
      self.DESCRIPTION_AR = ko.observable('AR');
      self.DESCRIPTION_SP = ko.observable('SP');
      self.IMAGE = ko.observable('/images/noimage.png');
};
ko.applyBindings(new PRDVM());
</script>

我想要的是通过更改下拉列表选择在运行时更改输入的属性绑定来切换语言

任何关于如何完成的想法都会很棒。

这里是开始的小提琴 https://https://jsfiddle.net/smtsghqm/2/

谢谢。

【问题讨论】:

    标签: jquery knockout.js data-binding


    【解决方案1】:

    您可以尝试使用可写计算属性,该属性根据所选选项确定要显示/更新的可观察对象。绑定将是计算的,不必更改。

    var PRDVM = function () {
        var self = this;
        self.SelectedValue = ko.observable();
        self.ID = ko.observable(0);
        self.DESCRIPTION_FR = ko.observable('FR');
        self.DESCRIPTION_EN = ko.observable('EN');
        self.IMAGE = ko.observable('/images/noimage.png');
        
        self.DESCRIPTION = ko.computed({
            read: function(){
                switch(self.SelectedValue()){
                    case "0": 
              	        return self.DESCRIPTION_EN();
                    case "1": 
              	        return self.DESCRIPTION_FR();
                }
            },
            write: function(value){
                switch(self.SelectedValue()){
                    case "0": 
              	        self.DESCRIPTION_EN(value);
              	        break;
                    case "1": 
              	        self.DESCRIPTION_FR(value);
              	        break;
                }
            }
        })
    };
    ko.applyBindings(new PRDVM());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    
    <select id="se" data-bind="value: SelectedValue">
      <option value="0">EN</option>
      <option value="1">FR</option>
      <option value="2">AR</option>
      <option value="3">SP</option>
    </select>
    <br /><br /><br />
        <input id="inp"  data-bind='textInput: DESCRIPTION' />

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 2012-01-22
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      相关资源
      最近更新 更多