2015-11-07 57 views
1

我開始在Knockout Component的工作中轉換系統的一部分,但任何時候,我都需要在我的組件中定義的訪問功能。如何訪問Knockout組件功能

例子我將創建一個msgComponent

在HTML:

<body> 
    <msgComponent params="message: 'blablabla'"></msgComponent> 
</body> 

在JS:

ko.components.register('msgComponent', { 
    viewModel: function (params) 
    { 
     this.message = ko.observable(params.message); 

     this.showMessage = function() 
     { 
      alert(this.messenge()); 
     }.bind(this); 
    }, 
    template: '<div data-bind="text: message"></div>' 
}); 


function myMasterViewModel() 
{ 
    var master = this; 

    // How to can I access my component this way? 
    master.msgComponent = msgComponent; 

    master.showMessage(); 
} 

就像在我的例子,如何可以訪問我的組件的功能與其他查看模型?


拳編輯: @Dandy 如果我需要實例的詳細msgComponent頁,我可以定義這樣?

var sharedComponent = function(params){ 
    var params = params || {}; 
    this.message = ko.observable(params.message); 
    this.showMessage = function() 
    { 
     alert(this.message()); 
    }.bind(this); 
} 

ko.components.register('msgcomponent', { 
    viewModel: function(params) 
    { 
     this.instance = params.viewModel; 
    }, 
    template: '<div data-bind="with: instance"><div data-bind="text: message"></div></div>' 
}); 

function myMasterViewModel() 
{ 
    var master = this; 

    master.msg = new sharedComponent({message: 'huahua'}); 

    master.show = function() 
    { 
     master.msg.showMessage(); 
    }; 
} 

還是有更正確的方法來處理這種情況?

回答

1

您可以嘗試instance組件註冊的方法。類似於

var sharedComponent = function(params){ 
    var params = params || {}; 
    this.message = ko.observable(params.message); 
    this.showMessage = function() 
    { 
     alert(this.message()); 
    }.bind(this); 
} 

var comShared = new sharedComponent ({message: 'test mssage'}); 

ko.components.register('msgcomponent', { 
    viewModel: {instance: comShared }, 
    template: '<div data-bind="text: message"></div>' 
}); 

function myMasterViewModel() 
{ 
    var master = this; 

    // How to can I access my component this way? 
    master.msgComponent = comShared; 
    master.msgComponent.showMessage(); 
} 

瞭解更多here

+0

如果我在頁面中需要實例更多的'msgComponent',我該怎麼辦? – Lai32290

+0

我編輯我的問題,添加代碼,我認爲是工作的一種方式 – Lai32290