仅在单击的函数内部而不是在 Type Script 代码的 UI 中更新可淘汰可观察值

Posted

技术标签:

【中文标题】仅在单击的函数内部而不是在 Type Script 代码的 UI 中更新可淘汰可观察值【英文标题】:knockoutobservable value update only inside the clicked function but not in the UI in Type Script code 【发布时间】:2020-07-28 06:50:07 【问题描述】:

请我从昨天开始就陷入这个问题而没有修复:

当我点击剔除复选框时,按钮将发送真假值,通过点击,事件到达 driverSelected 函数,将打印该项目并且它工作完美,但我需要用其他过滤选择的数据信息,但它没有改变是空的

html

<input type="checkbox" data-bind=" checked:isSelectedDriver , click:$root.driverSelected()" />

 this.assignedDriver = ko.observable(new Model.Driver());

查看模型函数

driverSelected = () => 
        return (item, ui: any) =>  // lambda expression  




            if (item.isSelectedDriver()) 



                this.assignedDriver = ko.observable(item.driver);

                this.assignedDriver.valueHasMutated;

                console.log(this.assignedDriver());




                return true

            
        
    

HTML 中的结果向我显示默认值,即使我删除属性值 (wbc_name) 也会显示为 [object object

【问题讨论】:

您必须通过使用新值调用它来设置一个可观察值:this.assignedDriver(item.driver) 【参考方案1】:

您正在重新分配 this.assignedDriver 是什么,而不是在您的 JS 中设置值。

要将值分配给可观察对象,请使用要为其设置的值调用可观察对象,例如:

this.thing = ko.observable(5); // Observable created, initial value 5.
this.thing(42); // Sets the value of the observable, value is now 42;

请参阅 the documentation 对此进行解释。

在这种情况下,解决方法是修改 driverSelected 中 if 语句的前两行。

driverSelected = () => 
    return (item, ui: any) => 
        if (item.isSelectedDriver()) 
            this.assignedDriver(item.driver);
            console.log(this.assignedDriver());
            return true;
        
    ;
;

【讨论】:

以上是关于仅在单击的函数内部而不是在 Type Script 代码的 UI 中更新可淘汰可观察值的主要内容,如果未能解决你的问题,请参考以下文章

单击表视图使其仅在第一次单击时附加字符串,而不是在 didSelectRowAtIndexPath 中的另一次单击时附加字符串

仅在函数中导入模块是否正确,而不是在文件的开头?

仅在左侧列中显示表格,而不是在 phpmyadmin 中显示数据库

GMUClusterRendererDelegate 仅在渲染集群时才显示标记图标视图,而不是在该 swift 5 之前

SAPUI5 addEventListener在加载时调用函数而不是在声明的事件上调用

如何仅在JavaScript中单击按钮时执行操作