是否可以在Slim中的外部js文件中调用路由

时间:2017-08-31 14:00:49

标签: javascript routes slim

在我的twig文件中,我正在调用一条通往我的ajax的路径

var fund = $('#fund');

        //this will call php to populate fund drop-down
        $.ajax({
        url: "{{ path_for('myfundrequest') }}",
        type: 'get',
        dataType: 'json'
        }).done(function (response) {
        var len = response.length;

        fund.empty();

        for (var i = 0; i < len; i++) {
        var fundNum = response[i][0];
        var fundName = response[i][1];

        fund.append("<option value='" + fundNum + "'>" + fundNum + ' -- ' + fundName + "</option>");
        }
        fund.prepend("<option value=''>- Select A Fund -</option>").val('');
        }).fail(function (jqXHR, textStatus, error) {
        console.log("getFund: " + error);
        });
        });

这是我的路线

$app->get('/fundrequest', 'PoEntryController:funds')->setName('myfundrequest');

我的问题是,如果我在公共文件夹中创建外部js文件 是否可以在外部文件中使这个工作url: "{{ path_for('myfundrequest') }}

1 个答案:

答案 0 :(得分:1)

不,它不适用于普通的JavaScript文件,但

我可以想到两个选择:

  1. 将JavaScript文件添加为twig文件,然后在路径上使用twig进行渲染。

    $app->get('/data/myScripts.js', 'ScriptProvider:myScript');
    
    class ScriptProvider {
        public function myScript($req, $res) {
            return $this->view->render($res, 'data/myScript.js.twig');
        }
    }
    
  2. 将URL作为全局变量添加到全局对象

    index.twig

    <!-- [..] -->
    <script>
       Url = {
           myfundrequest: "{{ path_for('myfundrequest') }}"
       };
    </script>
    

    然后使用Url.myfundrequest作为JavaScript中的网址

    $.ajax({
        url: Url.myfundrequest,
        ..
    
  3. 第二个选项会更高效,因为树枝引擎不需要运行。