2015-11-06 36 views
2

我正在使用jtable.js。我已经设法使用jquery构建原型,并且它工作正常,但现在我正试图在Angular中导入它。为此,我正在创建一个指令。 首先下面的代码显示了我使用JQuery所做的工作。在angularjs中使用jtable.js

在HTML中: -

<div id="mainTable"></div> 

在Javascript中: -

var mainTable = $("#mainTable"); 
// Initialize jtable 
mainTable.jtable("{ 
title: 'Table title', 
actions: { 
     listAction: URL, 
}, 
fields: { 
    Child: { 
     title: '', 
     display: openChild, // OpenChild is a function to get child grid layout 
     visibility: 'fixed' 
    }, 
    Name: { 
     title: 'Name' 
    } 
} 
}") 

// OpenChild的定义

function OpenChild(childData) { 
    var $img = $('<img src="imagePath"/>'); 
    $img.click(function(){........} 
    return $img; 
} 

要角,我包裹它用它一个将jtable配置作为属性值的指令。类似以下内容: -

<div id="mainTable" jtable-Configuration="{ 
title: 'Table title', 
actions: { 
     listAction: URL, 
}, 
fields: { 
    Child: { 
     title: '', 
     display: openChild, // Where/How to define openChild in angularjs so external library (jtable.js) can call it. 
     visibility: 'fixed' 
    }, 
    Name: { 
     title: 'Name' 
    } 
} 
}"></div> 

的问题是,我不知道我怎样才能让JTable的库调用OpenChild方法。我应该在哪里指定这种方法。在指令里面?作为HTML文件中的JavaScript函数?

请注意,我的指令是很简单的: -

(function() { 
'use strict'; 
angular 
    .module('myApp') 
    .directive('jtableConfiguration', jTableFunc); 

function jTableFunc() { 
    var directive = { 
     link: link, 
     restrict: 'A' 
    }; 
    return directive; 

    function link(scope, element, attrs) { 
     $(element).jtable(scope.$eval(attrs.jTable)); 
    }}(); 

而且,任何人都可以提出这是否是使用第三方库的正确方法?

回答

0

我会把openChild方法放在你使用指令的范围上 - 所以它在控制器中定义为该html。

您正在使用范围$ eval来评估范围上下文中的参数,因此您应该可以在范围内使用方法。

见$ EVAL