gpt4 book ai didi

javascript - 使用 ViewModel 构造函数 knockout 虚拟组合

转载 作者:行者123 更新时间:2023-11-30 06:33:47 26 4
gpt4 key购买 nike

我在使用 3 对 View / View 模型的虚拟 Knockout 组合中有一些奇怪的功能

autoAttendant.js

define(['durandal/app', 'viewmodels/settings/autoAttendant/menu'], function(app, Menu){

return function() {
var self = this;

self.attendant = ko.observable();

self.activate = function() {
self.autoAttendant(new Menu());
};
};
});

autoAttendant.html

<div id="content_pane" class="pushed_right">
<div class="content_box">
<h1>Attendant</h1>

<!-- ko compose: 'viewmodels/settings/autoAttendant/menu' --><!--/ko-->

</div>
</div>

菜单.js

define(['durandal/app', 'viewmodels/settings/autoAttendant/menuItem'], function(app, MenuItem) {

return function() {
var self = this;

self.menuItems = ko.observableArray([
new MenuItem('val1', 'label1'),
new MenuItem('val2', 'label2'),
// etc...
]);
};
});

菜单.html

<div class="list">
<div class="box_item master">
<!-- html content -->
</div>
<!-- ko foreach: { data: menuItems } -->
<!-- ko compose: 'viewmodels/settings/autoAttendant/menuItem' --><!--/ko-->
<!-- /ko -->
</div>

菜单项.js

define(['durandal/app'], function(app) {
var menuItem = function(val, label, active) {
var self = this;

console.log('val:', val, 'label:', label, 'active:', active); // purely for testing purposes

var _val = val || 'default_val',
_label = label || 'default_label',
_active = active || false;

self.val = ko.observable(_val);
self.label = ko.observable(_label);
self.active = ko.observable(_active);
};
return menuItem;
});

菜单项.html

<div class="level">
<div class="box_item clickable">
<!-- html content -->
</div>
</div>

它们一起代表显示菜单和该菜单的子项的设置中的单个页面。

Menu 和 MenuItem 必须与伴随的 View/ViewModel 分离,因为菜单本身是递归的,并且 menuItem 可以链接到具有自己的 menuItems 的子菜单。

问题出现在第 2 个 ko compose . console.log出现 3 次,前 2 次显示正确传递给 menu.js 中的 MenuItem 构造函数的参数:

val: val1 label: label1 active: undefined

在决赛中 console.log打印出来,已经传递的参数被覆盖,像这样:

val: <!-- ko compose: 'viewmodels/settings/autoAttendant/menuItem' --><!--/ko--> label: Object {model: "viewmodels/settings/autoAttendant/menuItem", bindingContext: L.b.z, activeView: null}
active: undefined

为什么会这样?

最佳答案

在对源进行彻底研究和(不止)一点点实验之后,以下方法有效:

<!-- ko compose: {view:'settings/autoAttendant/menuItem'} --><!--/ko-->

来自 Durandal docs on compose

关于javascript - 使用 ViewModel 构造函数 knockout 虚拟组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977802/

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