3

我将 Knockout 与 html 选择/选项结合使用(请参阅Fiddle):

<select data-bind="value: Width">
    <option>10</option>
    <option>100</option>
</select>

调用applyBindings此选项时被视为字符串。这会导致不良影响。考虑以下示例:

function AreaViewModel() {
    var self = this;

    self.Width = ko.observable(10);
    self.Height = ko.observable(10);

    self.Area = ko.computed(function () {
        return self.Width() * self.Height();
    });
}

$(document).ready(function () {
    var viewModel = new AreaViewModel();

    ko.applyBindings(viewModel);
});

WhenapplyBindings被调用,self.Widthself.Height从它们的初始值 10 类型转换为“10”,这导致计算函数的重新评估。

这在这里似乎没什么大不了的,但在一个更复杂的解决方案中,我有一个 PageSize 属性(每页 100 / 500 / 1000 行),当这个属性发生变化时会导致多个 AJAX 调用。

有哪些(花哨的)解决方案可以克服这个问题?

4

2 回答 2

2

你可以尝试类似的东西

self.Width = ko.observable(10);
self.Width.subscribe(function(newValue){
   if(typeof newValue === "string"){
       self.Width(parseInt(newValue));
   }
});
于 2013-04-17T12:32:32.433 回答
1

您可以计算宽度并编写自己的“写入”和“读取”选项,如下所示:

var _width = ko.observable(10);
self.Width = ko.computed({
  read : function(){
     return _width;
  },
  write: function(value){
     if(typeof value === "string"){
        _width(parseInt(value));
     }
  }
于 2013-04-17T13:08:30.870 回答