0

我有一个问题,当 knockout.js 从 ajax 调用设置一个可观察数组时,我的动态 html 被重新填充。发生这种情况时会重新加载动态 HTML,导致其中的 init 函数执行两次并重新绑定其他所有内容。为什么我的 html observable 会重新绑定动态 HTML?我会使用 Fiddle,但我有很多代码。

阿贾克斯回调

app.viewModel.members.bracket.parts(response.Parts);

ko.applyBindings(app.viewModel.members, app.viewModel.members.container().find('> div:first').get(0));

容器

<div id="container" class="clearfix" data-bind="html: members.html, container: {}">
</div>

<script type="text/javascript">
  app.viewModel.members = {
        container: ko.observable($('#container')),
        html: ko.observable(''),
        bracket: {
              parts: ko.observableArray([])
        }
    };
</script>

动态 HTML

<div data-bind="with: members.bracket">
    <div>   
        <div id="bracket-wrapper">
            <div data-bind="template: { name: partTemplate, foreach: parts }"></div>
        </div>
    </div>
</div>

<script type="text/html" id="part-template-1">
    <div class="bracket-part" data-bind="bracketGameInit: { left: $data.left, top: $data.top, height: $data.height, width: $data.width }, css: { 'reverse-bracket' : $data.reverse }"></div>
</script>

 app.members.bracket.init({
        pools: @Html.Raw(Model.DivisionPools.ToJSON()),
        teams: @Html.Raw(Model.DivisionTeams.ToJSON()),
        parts: @Html.Raw(Model.Parts.ToJSON())
    });
4

1 回答 1

0

这是由我收到的Observable Array Performance提示引起的。我将它更新回更新可观察数组的旧方式。

function populateGameNumbers(gameNumbers) {
        viewModel.gameNumbers([]);

        var numbers = [];
        for (var i = 0; i < gameNumbers; i++) {
            numbers.push(i + 1);
        }
        viewModel.gameNumbers(numbers);
        //viewModel.gameNumbers.push.apply(viewModel.gameNumbers, numbers );
    }
于 2012-07-08T22:09:42.273 回答