【问题标题】:Empty array bound element disappears on page load空数组绑定元素在页面加载时消失
【发布时间】:2023-03-15 20:04:02
【问题描述】:

我有一个简单的集合绑定到一个最初为空的 observableArray。当页面呈现时,它“有时”会在绑定开始并删除元素之前显示空模板。 如果您看不到它刷新页面几次。这发生在下面的容器少模板中,但也发生在普通的内联和脚本标签样式模板中。

查看:

<div>
  <input data-bind="value: address"/>
  <button data-bind="click: search">Search</button>
</div>
<!-- ko if: list().length > 0 -->
<h5 data-bind="text: list().length"></h5>
<!-- /ko -->
<!-- ko foreach: list -->
    <div class="result" data-bind="text: addr"></div>
<!-- /ko -->​

Javascript:

$(function() {

  var viewModel = function() {
      var self = this;

      self.address = ko.observable("Portland");

      self.list = ko.observableArray();
      self.hasData = function(){return self.list().length > 0;};

      self.search = function() {
              self.list.push({ addr: "Item01" , index: 1 });
              self.list.push({ addr: "Item02" , index: 2 });
              self.list.push({ addr: "Item03" , index: 3 });      
      };
  };

  var vm = new viewModel();
  ko.applyBindings(vm);
});​

我在jsFiddle - http://jsfiddle.net/motowilliams/mx7SM/ 或 JSBin 上似乎没有发生太多事情,但在本地和deployed - http://knockouttest.herokuapp.com/ 时确实发生了。

有什么想法吗?

【问题讨论】:

    标签: javascript mvvm knockout.js knockout-2.0


    【解决方案1】:

    对我来说,延迟只发生在存在这 2 个 github gist 脚本的情况下——这在生产中可能不会成为问题?在文档准备好之前,您的绑定不会发生,并且它们似乎显着减慢了速度。

    【讨论】:

    • 好电话我提取了这些要点,因为它们是为了展示/帮助人们查看代码而无需查看源代码。在我拉出这些外部脚本后,我确实确认它仍在执行此操作。我还确保我的 web 开发(在 Chrome、FF 和 IE 中确认)工具已禁用缓存以强制从服务器完全抓取。
    【解决方案2】:

    我无法在您的示例中看到问题,但您有几个选择:

    • script 标记中使用命名模板。浏览器不会呈现脚本标记中的标记。您似乎确实表示您尝试过,但您可能想再看看它。

    • 否则,您可以将其包装在一个元素中并在其上设置display: none 并使用data-bind="visible: true"。当页面加载时,它将被隐藏,并且 KO 将在绑定发生时将其设置为可见。比如:

    这是一个示例,其中包含我提到的原始选项和两个选项以及应用绑定时的两秒延迟:http://jsfiddle.net/rniemeyer/mx7SM/2/

    【讨论】:

    • 我想我需要的只是其他人看看它。谢谢瑞恩!
    猜你喜欢
    • 1970-01-01
    • 2015-07-31
    • 2017-05-07
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多