0

私は reuqireJS を使用しており、必要な js ファイルにある関数を呼び出すのに苦労しています。私のメインのapp.js「コントローラー」は(plugin)app.js、すべてのプラグイン構成とプラグイン関連の機能を処理する を必要とします。

これは app.js

define([], function(){
    var start = function() {
        require(['jquery', 'overrides', 'jqm', 'multiview', 'respond'],function() {

            // globals
            var 
            // PROBLEM attempt at an external plugin function object
            dataTablesExt = {},
            ...;

            // call for (plugin)app.js
            enhanceDataTables = 
                function( page, from ) {
                    var datatable = page.find('.table-wrapper table');                  
                    if ( datatable.length > 0 && datatable.jqmData('bound') != true ) {
                        datatable.not(':jqmData(bound="true")')
                            .each( function() {
                                var that = $(this),
                                tblstyle = that.jqmData("table-style");

                                that.jqmData('bound', true);
                                require(['services/datatables/app'], function (App) {
                                // this calls (plugin)app.js
                                App.render({style: tblstyle, table: that });
                                });
                            });
                        }
                }; 

        // PROBLEM - try to call function "Hello" inside datatables.app
       anotherFunc= 
                function( page, from ) {
                    dataTablesExt.sayHello("john");
                };

私の問題は、グローバル変数dataTablesExtを設定する方法だと思うので、グローバルに呼び出される関数で「埋める」ことができます。これが私が内部で試していることです(plugin)app.js:

define(['services/datatables/app', 'services/datatables/datatables.min'], function( app, datatables ) {
    function render(parameters) {
    ...
    // the function I want to call
    function helloName( name ){
        alert( name );
        };

    // I'm trying to add this function to the global "dataTablesExt"
    dataTablesExt.sayHello = helloName; 
    }

しかし...うまくいきません。私はいつも得ています:

  dataTablesExt.sayHello is not a function

質問:
誰かが私が間違っていることを指摘できますか? これが不可能な場合、代替手段は何でしょうか。

カスタム イベントをトリガーすることを考えていましたが、イベントと共に渡すオブジェクトを設定する必要があり、その方法がわかりません。

手伝ってくれてありがとう!

4

1 に答える 1

0

とった。使用しているグローバル変数にdataTablesExtをアタッチし、変数として宣言しないようにする必要があります。このように:

 // globals
        var 
        ...;

        $.dataTablesExt = {};

次に、それに関数を割り当てて呼び出すことができます。

于 2012-07-30T07:12:29.170 に答える