gpt4 book ai didi

javascript - 具有基于 View 的数据绑定(bind)上下文的模块化 Web 组件

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:18 25 4
gpt4 key购买 nike

我试图使我的代码尽可能模块化并模仿 WPF 和 Caliburn.Micro 的模式。以下是我迄今为止使用 Knockout 组件尝试过的内容。

组件 View 模型

function welcomeViewModel() {
this.greeting = 'Hello world!;
}

应用 View 模型

function appViewModel() {
this.firstGreetingVM = new welcomeViewModel();
this.secondGreetingVM = new welcomeViewModel();
}

应用 View

<WelcomeWidget data-bind-to="firstGreetingVM"/>
<WelcomeWidget data-bind-to="secondGreetingVM"/>

如何在 View 本身中定义上下文(使用什么 View 模型)?

最佳答案

如果您适本地注册了一个组件,您可以使用任何您想要的 View 模型。这种方法可以让您在参数中将 viewModel 传递给您的组件,或者让它使用您的参数创建一个新的 View 模型。

ko.components.register('WelcomeWidget', {
template: ...
viewModel: function (params = {}) {
return params.viewModel || new WelcomeWidgetViewModel(params);
},
});

AppViewModel

function AppViewModel() {
this.firstGreetingVM = new WelcomeWidgetViewModel({greeting: 'first greeting'});
this.secondGreetingVM = new WelcomeWidgetViewModel({greeting: 'second greeting', someOtherProperty: 'howdy'});
}

AppViewModel.html

<WelcomeWidget params="viewModel: firstGreetingVM"></WelcomeWidget>
<WelcomeWidget params="viewModel: secondGreetingVM"></WelcomeWidget>
<WelcomeWidget params="greeting: 'third greeting', someOtherProperty: 'blah'"></WelcomeWidget>

欢迎WidgetViewModel

function WelcomeWidgetViewModel(options = {}) {
this.greeting = options.greeting;
this.someOtherProperty = options.someOtherProperty;
}

关于javascript - 具有基于 View 的数据绑定(bind)上下文的模块化 Web 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847067/

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