2014-02-09 19 views
0

我有一個小部件允許我傳遞數據部分。根據我是否將數據部分通知給該小部件的一個實例,我想從小部件中顯示/隱藏某些內容。所以有可能在我的小部件viewmodel上檢測是否爲數據部分指定了某些東西?檢測小部件上的數據部分

回答

0

一個部件的視圖模型的activate方法被傳遞一個settings對象(此代碼是從Durandal sample application):

ctor.prototype.activate = function(settings) { 
    this.settings = settings; 
}; 

settings對象,你可以檢查parent屬性,它會給你的節點該控件被綁定到:

<div data-bind="expander:{items:projects}"></div> 

這應該給你訪問節點上的data-part屬性。

0

您可以在小部件的attached事件回調中使用composition模塊的getParts方法。見http://durandaljs.com/documentation/api#module/composition/method/getParts

// MyWidget viewmodel 
define(['durandal/composition'], function (composition) { 
    var widget = function() { 
     var plugin = this; 

     plugin.showSomething = function() { 
      something.show(); 
     ); 

     // See http://durandaljs.com/documentation/Interacting-with-the-DOM  
     plugin.attached = function (view, parent) { 
      // See http://durandaljs.com/documentation/api#module/composition/method/getParts 
      var dataparts = composition.getParts(view); 

      plugin.parts = { 
       $partOne: $(dataparts.datapartnameone), 
       $partTwo: $(dataparts.datapartnametwo) 
      }; 

      if (plugin.parts.$partOne) { 
       // An element with data-part="datapartnameone" was found in the host container 
       plugin.showSomething(); 
      } 
     }; 
    }; 

    return widget; 
}); 

// Example host container 

<div data-bind="MyWidget: {}"> 
    <span data-part="datapartnameone">My data-part</span> 
</div>