有没有一个等价的'作为'用于knockout.js中的
Is there an equivalant of 'as' for with in knockout.js?
在knockout.js foreach
中,您可以使用as
参数将值作为别名保存到上下文中,这样您就可以在绑定中更深的地方使用它。请参阅文档。
<ul data-bind="foreach: { data: items, as: 'category' }">
</ul>
与有一个等价词吗?类似于:with: { data: item, as: 'category' }
?
或者有更好的方法吗?
我想阻止的:
- 采用与
$parent.$parent
等相关的方法 - 将其放入视图模型
没有,没有。您可以看到as
是如何在foreach
绑定的源代码中实现的,并将其与没有类似内容的with
绑定的源进行比较
你还没有对你的场景进行全面的再现,所以很难提出$parent.$parent
的务实、具体的替代方案。您已经提到自己(不想使用)的主要方法是在视图模型中执行此操作。我认为,在大多数情况下,这是事实上的首选方式:类/视图模型/构造函数之间的关系最好在JavaScript代码本身中编码。一点也不,因为这将使它可以进行单元测试。
你唯一的选择是从$root
开始,一路往下走。例如,假设这个嵌套:
var vm = { planet: { name: 'earth', country: { name: 'UK', city: { name: 'London' } } } };
然后,在最深的嵌套中,您有两种选择:
$parent.$parent.name
$root.planet.name
但再次强调:如果没有真正的谴责,很难提出真正的替代方案。
with
绑定没有as
选项。但是您可以使用foreach
绑定来绑定单个项目:
foreach: { data: item, as: 'category' }
如果你知道item
永远不会为null,你可以使用这个简单的自定义绑定来做你想做的事情:
ko.bindingHandlers.with2 = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var innerContext = bindingContext.createChildContext(
function () { return valueAccessor()['data']; },
valueAccessor()['as']);
ko.applyBindingsToDescendants(innerContext, element);
return { controlsDescendantBindings: true };
}
};
相关文章:
- 将函数的上下文应用于javascript变量
- keyup事件处理程序更改焦点不适用于快速键入
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- PHP中的setcookie仅适用于localhost
- 包括用于facebook评论框的JavaScript SDK
- 如何检测用于WebGL的专用或集成显卡
- jQuery SelectMenu不适用于来自AJAX调用的KNOCKOUT DATA-BINDING
- 在ko.applyBindings(..)中执行Knockout js订阅函数(用于可观察对象)
- 有没有一个等价的'作为'用于knockout.js中的
- Knockout mapping用于ko.mapping.toJSON()的选项-方法
- 使用类与 ids 用于多个 li 元素示例 20,具有 KNOCKOUT 和 jQuery,性能和可保留性更好
- Knockout中的CSS绑定,用于绑定两个类,其中一个是动态的,另一个是静态的并经过评估的
- knockout.js事件,用于跟踪输入文本框内的每一个文本更改
- 选择:dojo、backbone.js、knockout.js(或其他)用于Rails 3.1应用程序
- Knockout js:用于绑定对象而不是单个值的代码
- Knockout JS模式用于同一页面中的多个视图模型,维护DOM结构
- 用于Ajax表单提交的Knockout和JQuery
- Knockout克隆不适用于函数实例
- 如何将jquery效果应用于Knockout.js创建的元素