gpt4 book ai didi

javascript - 使用最终模块模式 (DMP),我如何引用我的可观察属性?

转载 作者:行者123 更新时间:2023-11-30 12:17:49 25 4
gpt4 key购买 nike

我正在使用一项服务,使调用对话框覆盖在我的项目中随处可用。我只将代码缩减为相关部分。

当我打电话

userDialogService.hide()

在控制台中,它按预期工作。

但是当我从 View 的点击绑定(bind)中调用它时,它说

isShown 不是函数

出现在 userDialogService.hide() 中:

this.isShown({ visible: false });

所以我的 this 可能搞砸了。我该如何解决?

这是我服务的(精简)代码:

var userDialogService = (function () {
"use strict";
var _private = {
//BEGIN Private methods
//END Private methods
};

var _public = {
//BEGIN Public properties
isShown: ko.observable({ visible: false }),
//END Public properties
//BEGIN Public methods
show: function () {
this.isShown({ visible: true });
},
hide: function () {
this.isShown({ visible: false });
},
//END Public methods
};

return _public;
}).call(this);

那么如何在我的 show()hide() 方法中正确引用 isShown 呢?我必须在它前面加上 _public. 吗?如果是,为什么?

更新:

这是带有调用 userDialogService.hide() 的点击绑定(bind)的按钮:

<button type="button" data-bind="click: userDialogService.hide">Close</button>

最佳答案

您可以执行以下操作:

 var _public = {
//BEGIN Public properties
isShown: ko.observable({ visible: false }),
//END Public properties
//BEGIN Public methods
show: function () {
_public.isShown({ visible: true });
},
hide: function () {
_public.isShown({ visible: false });
},
//END Public methods
};

此代码可确保保留对 _public 变量的引用,即使该方法将在另一个执行上下文中执行也是如此。

选项 2:

您还可以选择在要执行服务代码的 hideshow 方法的代码上使用应用调用模式。

例子:

userDialogService.hide.apply(userDialogService, *args here*);

注意:如果将此脚本缩小,则此语法在文件大小方面将优于使用 this。 ;)

关于javascript - 使用最终模块模式 (DMP),我如何引用我的可观察属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31940422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com