【问题标题】:observable() does not update selects selected item as expectedobservable() 未按预期更新选择选定项目
【发布时间】:2013-03-15 04:49:00
【问题描述】:

HTML:

<select id="Catagories_CategoryId" data-bind="options: CategoryServiceTypes, 
    optionsText: 'Name',                        
    optionsCaption: 'Please select a Category...',                                        
    value: SelectedCategoryType">
</select>

在下面的代码示例中,我刚刚删除了网格中的一个项目,因此我通过 LoadServiceTypesFromSvc() 重新填充了网格

obj.SelectedCategoryTypeHolder(obj.SelectedCategoryType()); //copy the old selected object
pager.LoadServiceTypesFromSvc(); //repop
ko.utils.arrayForEach(obj.CategoryServiceTypes(), function(data) {                                                        
    if (data.CategoryId() == obj.SelectedCategoryTypeHolder().CategoryId()) {
        obj.SelectedCategoryType(data);
        alert('selected ' + obj.SelectedCategoryType().Name()); //shows the name of the item I'm aiming for
    }
});

LoadServiceTypesFromSvc() 也重新填充了选择。我想将选择的选定值设置为数据刷新之前的值。

即使警报确认 obj.SelectedCategoryType() 已设置为我希望设置的值 - 选择本身保持不变并仍显示默认的“请选择...”第一项。

我错过了什么?

非常感谢

【问题讨论】:

  • 您的.LoadServiceTypesFromSvc() 中有异步AJAX 请求吗?
  • 不,这是同步编辑:实际上我需要检查...好点!
  • 它是异步的 ($.ajax()) 但这一切都发生在 request.done() 中
  • ko.utils.arrayForEach(...)也必须在request.done(...)内部运行。
  • @f_martinez - 是的 - 我需要在 LoadServiceTypesFromSvc() 的 request.done() 而不是 delete 函数的 request.done() 中运行循环。惊人的。让您的解决方案成为答案,我会勾选它。非常感谢!

标签: knockout.js


【解决方案1】:

针对 .done 函数中 LoadServiceTypesFromSvc() 返回的每个项目运行 ko.utils.arrayForEach(...) 块

【讨论】:

    猜你喜欢
    • 2020-05-02
    • 2010-11-03
    • 1970-01-01
    • 2021-09-19
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多