2015-04-08 52 views
2

我正在用Laravel(PHP框架)構建一個遵循其最佳實踐的系統,並且直到現在還沒有多少Javascript。使用Javascript框架與Laravel

Laravel沒有提供一個簡單的方法來刪除項目(我在這個應用程序中有很多CRUD),我必須使用AJAX刪除一個項目並刷新這個項目。除了這個動作之外,我還想顯示一條警報(比如頁面頂部的Bootstrap警報),說明一切正常,或者發生錯誤。

我正在考慮使用像Angular,Ember,Backbone,Knockout(和其他)的JS框架,而不是使用jQuery的所有hide/show。但我不想使用的所有功能,如路由,視圖,以及由後端API發送JSON響應所完成的通信客戶端 - 服務器,因爲我已經將所有應用程序都用PHP編寫(Laravel視圖) 。

有沒有一種方法來使用JS框架的數據綁定,我正在尋找?現在,我正在考慮在刪除操作,但我肯定會有更多的Javascript/AJAX操作。

編輯

,這裏的要點是,我想觸發的UI一些動作如改變對模型(和只是)製造,不使用所有的jQuery是hide/show的。 Angular,Backbone和所有這些框架都提供了它,但它們的示例顯示了一個後端API,我不想使用它。乍一看,Knockout JS適合我正在尋找的東西。

+1

角是唯一的JS框架我已廣泛使用。當然,沒有什麼能夠強制你使用它的所有功能。核心文件甚至不包括路由器。我懷疑其他框架也會很好。公平的警告。如果你對角度感到滿意,那麼我懷疑你的Laravel觀點會開始看起來不那麼吸引人。 – Cerad

+0

react.js怎麼樣?我用了很長一段時間。這是一個很棒的框架,但有時它會提供一些你甚至不需要的額外功能。骨幹也可能工作。 –

+0

@NaingLinAung我在想React JS(它對組件有一個狀態控制),但現在我要去尋找其他框架。謝謝! –

回答

2

當然,你可以檢查像laroute

包您可以爲JavaScript端任何這樣的行動路線:

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

laroute.action('[email protected]'); 

編輯:實例添加

我有「主「頁面模板複雜的設計(在此簡化)

<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方法的列表,但更好的方法是使用一個resourceful controller實現REST方法,你只能使用你想要的方法。

//routes.php 
Route::post("items/delete.", "[email protected]"); 

在我的控制器我有一個刪除方法(也簡化)

//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('[email protected]', {'item_id': item_id}, function() { 
       console.log('New table loaded!'); 
     }); 

    }); 

}); 
+0

這非常有用!也許我會用它! 但是我正在尋找能夠反映模型變化(由後端響應引起的)和我看到的UI(數據綁定) –

+1

......正如@Cerad所述,似乎是有棱角的。 。我建議你看看這個laravel + angular [excelent tutorial](https://scotch.io/tutorials/create-a-laravel-and-angular-single-page-comment-application)。我個人使用jquery來完成這個任務。用'$ .load' jquery方法。如果你想要一個例子,我可以發佈它。 –

+0

您能舉一個關於您使用jQuery與路由器的例子嗎? @OmeCoatl –