2013-06-20 22 views
0

我正在創建一個使用batman.js作爲前端的rails 3應用程序。當我處於單個記錄的show.html視圖中時,我可以提交成功的刪除請求。但是當我在index.html視圖中時,相同的模式不會觸發刪除方法。我猜測,當Batman.js觸發一個我不明白的刪除請求時,會出現一個小魔術。可能與視圖中venue變量的範圍有關。我將爲控制器和兩個視圖顯示我的代碼。如果你需要別的東西,請問。從索引視圖啓動DELETE請求batman.js和rails 3

/app/assets/javascripts/controllers/venues_controller.js.coffee

class Plansandpictures.VenuesController extends Batman.Controller 
    routingKey: 'venues' 

    index: (params) -> 
    @set 'newVenue', new Plansandpictures.Venue 
    Plansandpictures.Venue.load (err, venues) => 
     @set 'venues', Plansandpictures.Venue.get('loaded') 

    show: (params) -> 
    Plansandpictures.Venue.find parseInt(params.id, 10), (err,result) => 
     throw err if err 
     @set 'venue', result 

    @render source: 'venues/show' 


    create: (params) -> 
    @newVenue.save (err, venue) => 
     if !err 
     @set 'newVenue', new Plansandpictures.Venue 
     Plansandpictures.Venue.get('loaded').add(venue) 

    update: (params) -> 

    destroy: (params) -> 
    @get('venue').destroy (err) => 
     if err 
     throw err unless err instanceof Batman.ErrorsSet 
     else 
     Plansandpictures.flashSuccess "Removed successfully!" 
     @redirect '/venues' 

/app/assets/javascripts/views/venues/show.html

<h4 data-bind="venue.name"></h4> 
<h6>Description</h6> 
<p data-bind="venue.description"></p> 
<h6>Address</h6> 
<p data-bind="venue.address"></p> 
<h6>City</h6> 
<p data-bind="venue.city"></p> 
<h6>State</h6> 
<p data-bind="venue.state"></p> 
<a data-event-click="controllers.venues.destroy | withArguments venue">delete</a> 

/app/assets/javascripts/views/venues/index.html

<h2>Venues</h2> 
<table> 
    <thead> 
    <th>Name</th> 
    <th>Description</th> 
    <th>Address</th> 
    <th>City</th> 
    <th>State</th> 
    </thead> 
    <tbody> 
    <tr data-foreach-venue="venues"> 
     <td data-bind="venue.name"></td> 
     <td data-bind="venue.description"></td> 
     <td data-bind="venue.address"></td> 
     <td data-bind="venue.city"></td> 
     <td data-bind="venue.state"></td> 
     <td><a data-route="routes.venues[venue]">show</a></td> 
     <td><a data-event-click="controllers.venues.destroy | withArguments venue">delete</a></td> 
    </tr> 
    </tbody> 
</table> 

<h3>Add a Venue</h3> 
<form data-formfor-venue="controllers.venues.newVenue" data-event-submit="controllers.venues.create"> 
    <input class="new-item" placeholder="Name" data-bind="venue.name" /> 
    <input class="new-item" placeholder="Description" data-bind="venue.description" /> 
    <input class="new-item" placeholder="Address" data-bind="venue.address" /> 
    <input class="new-item" placeholder="City" data-bind="venue.city" /> 
    <input class="new-item" placeholder="State" data-bind="venue.state" /> 
    <input class="new-item" type="number" placeholder="1" data-bind="venue.user_id" /> 
    <input type="submit" value="Add Venue" /> 
</form> 

回答

1

您的控制器假定它可以通過@get('venue')獲取場地,但這不一定設置在index視圖中。所以改變:

destroy: (params) -> 
    @get('venue').destroy (err) => 

到:

destroy: (venue) -> 
    venue.destroy (err) => 

而這應該從兩個上下文環境中運行。