knockout.js id处理错误?

knockout.js id处理错误?,knockout.js,Knockout.js,我想知道你们中是否有人经历过以下问题,也许知道解决方法 如果我在ko模板中有一个“foreach”迭代,并且试图使用“with”上下文修饰符,那么如果“with”试图绑定到一个名为“id”的属性,ko将无法处理迭代的第一项(是的,仅第一项) 例如: 如果运行它,它将不会显示第一项,但如果将内部虚拟元素的“with”语句更改为“name”,则它将按预期工作。真烦人…: 有人知道如何解决这个问题吗 提前谢谢 with用于对象。所以它做了一个简单的真实性检查,认为零是假的。您可以通过将数字转换为字符串

我想知道你们中是否有人经历过以下问题,也许知道解决方法

如果我在ko模板中有一个“foreach”迭代,并且试图使用“with”上下文修饰符,那么如果“with”试图绑定到一个名为“id”的属性,ko将无法处理迭代的第一项(是的,仅第一项)

例如:

如果运行它,它将不会显示第一项,但如果将内部虚拟元素的“with”语句更改为“name”,则它将按预期工作。真烦人…:

有人知道如何解决这个问题吗


提前谢谢

with
用于对象。所以它做了一个简单的真实性检查,认为零是假的。您可以通过将数字转换为字符串来解决此问题:

编辑:以下是基于my的用替换的
,它不进行任何值检查(示例:):


一个更简单的示例显示,问题的原因是ko处理零,每当您尝试对包含单个零编号的属性创建“with”上下文更改时,它将失败:[link]如果您将视图模型的“item”属性的值更改为零,在“with”语句的范围内不会呈现任何内容…不知道您在说什么。。您的小提琴可以很好地显示所有3个项目,没有所谓的“id”。如果我将“name”改为“id”,它仍然会显示。你的第二个也一样fiddle@antishok:“如果将视图模型的'item'属性的值更改为零,则在'with'语句的范围内不会呈现任何内容。”谢谢您的回答。我知道它可以处理字符串和任何其他数据,包括数字。当然除了零。我不认为检查“真实性”而不是检查值是否未定义有什么意义。此外,我不明白为什么尽管有包装html元素,却没有呈现任何内容。它不应该迭代,也不应该迭代,而是将数据处理为空,而不是整个内容。而且它还可以处理任何数据,绝对为零,但也可以处理未定义的数据等等。我添加了一个自定义绑定,您可能会发现它在您的情况下很有用。使用自定义绑定代替绑定确实是一个非常好的主意-非常有效,谢谢:)
ko.bindingHandlers['mywith'] = {
    'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var bindingValue = ko.utils.unwrapObservable(valueAccessor());
        var innerContext = bindingContext['createChildContext'](bindingValue);
        ko.applyBindingsToDescendants(innerContext, element);
        return { 'controlsDescendantBindings': true };
    }
};
ko.virtualElements.allowedBindings.mywith = true;