网站搜索

knockout.js - 在小部件中绑定“foreach”并异步调用数据


我刚开始使用 Durandal、Knockout 和 TypeScript

我在小部件中使用“foreach”绑定进行模板化时遇到问题。非常感谢任何帮助。

我需要为产品创建一个分页小部件。为此,我创建了一个可观察数组 totalPagesHolder,并将我的页面数量作为值推入其中(例如,如果我们有 3 页,则该数组将包含 [1,2,3])

我处理承诺,并异步获取我所有产品数组的长度。

widgets/pagination/viewmodel.ts

class viewmodel {
    ...
    public totalPagesHolder: KnockoutObservableArray<number> =     ko.observableArray<number>([]);
    ...
    activate(){
         this.totalFetch().done( (total) => {
            let pages = Math.floor(this.total() / this.pageSize);
            pages += this.total() % this.pageSize > 0 ? 1 : 0;
            for (let i = 1; i < pages +1 ; i++) {
                this.totalPagesHolder.push(i);
            }

            console.log("totalPagesHolder", this.totalPagesHolder());

    });
}

wigdets/分页/查看.html

<ul class="pager"> 
          <li><button>Next</button></li>
          <!-- ko with: totalPagesHolder -->
          <li><button data-bind="text: $index() + 1, click: gotoPage">...   </button></li>
         <!-- /ko -->
         <li><button class="btn btn-default">  Previous  </button></li>
    </ul>  

我的视图.html

 <div class=”page”>
        <div data-bind="widget: {kind:'pagination'}"></div>
    </div>

如果我不使用小部件,那么 knockout 会渲染所有按钮

my-viewmodel.ts

class MyModel {
    public totalPagesHolder = ko.observable([1,2,3,4]);
}
export = MyModel;

我的视图.html

<ul class="pager"> 
      <li><button>Next</button></li>
      <!-- ko with: totalPagesHolder -->
      <li><button data-bind="text: $index() + 1, click: $parent.gotoPage">...   </button></li>
     <!-- /ko -->
     <li><button class="btn btn-default">  Previous  </button></li>
</ul>  

答案#1

看起来你可能需要设置你的小部件,使其在激活时接受一个变量,以确定显示按钮的数量。

即使没有页面按钮,你在页面源代码中看到小工具正在渲染的证据,还是根本看不到?