在knockout.js中为ViewModel创建多个实例

时间:2013-04-16 18:04:29

标签: jquery knockout.js

我正在使用knockout创建一个Pager控件。我有一个viewModel(PaginatorViewModel),它有“currentPageIndex”,“itemsPerPage”,“totalRecords”等属性。 在每个页面中,我有两个分页控件,一个在TOP上,另一个在页面底部。

在某些情况下,我有标签,在每个标签中我都有两个分页控件(TOP和Bottom)。

当我在Tab1中并移动到第2页(currentPageIndex = 2)时,Tab2中的分页控件也将currentPageIndex显示为2.

我想在所有选项卡中使用PaginatorViewModel,但是想要维护多个实例...每个选项卡都有一个实例。

我怎样才能做到这一点。

这是我的ViewModel,

var CustomPaginator = {        
        //The current page index of the post being displayed.
        currentPageIndex: ko.observable(1),
        //specifies the page options
        pageOptions : ko.observableArray([25, 50, 100, 200]),

        //specifies the PageOptions will be shown or not.
        showOptions : ko.observable(true),                
        //The maximum number of topics displayed per page.
        itemsPerPage : ko.observable(25),
        //Specifies the total no of records
        totalRecords : ko.observable(1),
        isVisible : ko.observable(false),
        //pageIndex is bounded to the text box, and the CurrentPageIndex contains the actual value.
        // this is to avoid the notifying the subscribers when the user enters the out of range values
        // like 0,and N , where N > no of pages
        pageIndex : ko.observable(1)
  };

我如何为此创建实例。

谢谢, 拉梅什

1 个答案:

答案 0 :(得分:3)

为每个分页器创建一个viewmodel,然后将每个分页器绑定到您希望在其中使用的页面元素:

var page1 = new CustomPaginator();
ko.applyBindings(page1, $('#page1')[0]);

为每个人做这个。您也可以将相同的视图模型绑定到页面的不同部分,如果这是您想要做的事情。

您需要更改定义视图模型的方式,以便可以创建它的新实例:

var CustomPaginator = function()
{
    //your view model properies here
}