【问题标题】:Using Javascript framework with Laravel [closed]在 Laravel 中使用 Javascript 框架 [关闭]
【发布时间】:2015-06-12 19:05:15
【问题描述】:

我正在使用 Laravel(PHP 框架)按照其最佳实践构建一个系统,并且到目前为止几乎没有 Javascript。

Laravel 没有提供删除项目的简单方法(我在这个应用程序中有很多 CRUD),我必须使用 AJAX 删除一个项目并用这些项目刷新表格。除了这个动作之外,我还想显示一个警报(如页面顶部的引导警报),说明一切运行正常,或者发生了错误。

我正在考虑使用像 Angular、Ember、Backbone、Knockout(和其他)这样的 JS 框架,而不是使用 jQuery 的所有 hide/show。但我不想使用所有功能,例如路由、视图以及由发送 JSON 响应的后端 API 完成的通信客户端-服务器,因为我已经编写了所有应用程序PHP(Laravel 视图)。

有没有办法将 JS 框架用于我正在寻找的数据绑定?目前,我只考虑 delete 操作,但我肯定会有更多 Javascript/AJAX 操作。

编辑

这里的要点是,我想在模型(仅此而已)上进行更改时触发 UI 上的一些操作,而不使用 jQuery 的所有 hide/show。 Angular、Backbone 和所有这些框架都提供了它,但它们的示例显示了一个后端 API,我不想使用它。乍一看,Knockout JS 符合我的要求。

【问题讨论】:

  • Angular 是我唯一广泛使用的 js 框架。当然,没有什么可以强迫您使用它的所有功能。核心文件甚至不包括路由器。我怀疑其他框架也会很好。公平警告。如果您对 Angular 感到满意,那么我怀疑您的 Laravel 视图将开始看起来不那么吸引人了。
  • react.js 怎么样。我用了很长一段时间的角度。这是一个很棒的框架,但有时它会提供一些你甚至不需要的额外功能。骨干网也可以工作。
  • @NaingLinAung 我在考虑 React JS(它对组件有状态控制),但现在我要寻找其他框架。谢谢!

标签: javascript php angularjs laravel backbone.js


【解决方案1】:

当然可以,检查像laroute这样的包

您可以像这样为任何操作 javascript 端生成路由:

/** 
 * laroute.action(action, [parameters = {}])
 *
 * action     : The action to route to.
 * parameters : Optional. key:value object literal of route parameters.
 */

laroute.action('HomeController@getIndex');

编辑:添加示例

我有一个设计复杂的“母版”页面模板(此处简化)

<div class="panel">
    <div class="panel-heading"></div>
</div>
<div class="panel-body">
    <div id="items-table">
        @include('_items_list', compact(['items']) )
    </div>         
</div>

我有一个部分刀片模板中的项目列表(也简化了)

//_items_list.blade.php
<table class="table" >
    <thead>
    <tr>
        <th>#</th>
        <th>Name</th>
        <th>Delete</th>
    </tr>
    </thead>
    <tbody>
    @foreach($items as $item)
        <tr>
            <td >
                {{ $item->id }}
            </td>
            <td>
                {{ $item->name }}
            </td>
            <td>
                <a href="javascript:void(0)" class="btn btn-danger items" data-item_id="{{ $item->id }}">Delete</a>
            </td>
        </tr>
    @endforeach
    </tbody>
</table>

在我的路由中,我使用 POST 方法,但更好的方法是使用实​​现 REST 方法的resourceful controller,您可以只使用您想要的方法。

//routes.php
Route::post("items/delete.", "ItemsController@delete");

在我的控制器中,我有一个删除方法(也简化了)

//app/controllers/ItemsController.php
class ItemsController extends BaseController {

    public function delete(){

        $item = Item::find(Input::get('item_id'));

        if($item) {
            $item->delete();

            //return the new items list                
            $items = Tramite::orderBy('created_at','desc')->paginate(10);
           return View::make('_items_list', compact($items));
        }
    }
}

在我的 js 文件中,我有一个像这样的 jquery 事件监听器

//public/js/items.js 
$(function () {

    $('.items').click(function(ev){

        var item_id = $(this).data('item_id');

        //Here comes the laroute library!
        //@see http://api.jquery.com/load/
        $( "#items-table" ).load( laroute.action('ItemsController@delete', {'item_id': item_id}, function() {
                console.log('New table loaded!');
        });

    });

});

【讨论】:

  • 这太有用了!!也许我会用它!但我正在寻找可以反映模型更改(由后端响应引起)和 UI(数据绑定)的东西
  • 我明白了......正如@Cerad 所说,似乎是有角度的......我建议你看看这个 laravel + angular excelent tutorial。我个人使用 jquery 和 laroute 来完成这项任务。使用$.load jquery 方法。如果你想要一个例子,我可以发布它。
  • 你能举一个例子来说明你在 laroute 中使用 jQuery 吗? @OmeCoatl
  • 我添加了一个例子。我知道对此有更好的方法,但这很容易并且在特定情况下对我有用。
猜你喜欢
  • 2013-02-22
  • 2010-11-20
  • 2012-03-17
  • 1970-01-01
  • 2015-11-10
  • 2022-11-13
  • 2013-01-16
  • 2013-06-22
相关资源
最近更新 更多