如何使用敲除JS循环等运行常规/普通JavaScript代码

如何使用敲除JS循环等运行常规/普通JavaScript代码,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,假设你有一个简单的击倒循环 <!-- ko foreach: data --> <div ... show something </div> <!-- /ko --> 你不应该那样做 原因是,您将混合业务逻辑和数据,而这不应该发生。您可以使用afterAdd处理程序在foreach期间执行函数 <!-- ko foreach: { data: data, afterAdd: myhandler } --> <div

假设你有一个简单的击倒循环

<!-- ko foreach: data -->
    <div ... show something </div>
<!-- /ko -->


你不应该那样做


原因是,您将混合业务逻辑和数据,而这不应该发生。

您可以使用afterAdd处理程序在foreach期间执行函数

<!-- ko foreach: { data: data, afterAdd: myhandler } -->
    <div ... show something </div>
<!-- /ko -->


嗨,达瓦特,谢谢你的回复。我明白你的意思,这不是我打算经常做的事。但是,如果不深入了解我目前的具体情况,我觉得在淘汰循环中使用常规JS会更容易。此外,还有一些情况下,我可能只是为了调试和实验目的而这样做,但淘汰不希望你这样做;这就是为什么他们不让你!几乎总是有更好的方法来调试这样的东西;看看Chrome的开发者工具或Firebug之类的东西。我已经熟悉并使用Firebug和console.debug()等。我认为你没有抓住要点,我已经考虑过其他选项,在这种情况下,捕获模型内的业务逻辑可能会更糟糕,因为这是业务登录的一个相当肤浅的要求。但是在这种情况下使用模型可能意味着在循环的每次迭代中都要做一个复杂的比较,这对性能不好,所有这些都可能被循环中的一两行JavaScript所取代。我恐怕你没有读到我说的。我已经说过好几次了,knockout不会提供实用程序来实现这一点,您不应该从一开始就这样做。更进一步,有一种特殊情况是,我正在循环一个大数组并向用户返回一个列表。在这个循环的某一点上,我希望列表中的其余行以不同的方式呈现。例如,我可以在我的模型中使用一个函数来确定行是否应该以某种方式呈现,但是这个比较操作不是直接的,需要操纵2个字符串来进行比较。我考虑的另一个替代方法是在循环中使用标志。一旦满足所需条件,将设置一个标志,其余行将以不同方式呈现。(在循环中进行比较更便宜,因为我可以只查找精确的字符串匹配,而不是像在模型中进行比较那样,操纵字符串来确定一个字符串是否在另一个字符串之前)。我宁愿将标志本地存储在循环中,而不是将标志存储在模型中。这就是为什么我想在knockout循环中运行JS。除此之外,我还想知道一种在knockout视图中运行普通JavaScript的粒子方法,因为在其他情况下我可能很少需要它。感谢有用的提示,现在使用addAfter尝试它很好,但不是100%适合我的想法。我想初始化一个标志,稍后在循环中检查它。问题是在循环的第一次迭代中,标志没有初始化。我用了这个非常肮脏的黑客我自己也不喜欢。有没有更简单的方法?是否值得编写一个允许“内联”javascript的自定义绑定?也许我偏离了主题。@Sam-如果你张贴一张小提琴来展示你想要达到的目标,我相信我们可以找到一个更简单的方法。我以前从未需要像这样的内联js。