2012-02-03 12 views
13

पर पैरामीटर नहीं भेज रहा है, मैं रीढ़ की हड्डी के लिए नया हूं और इसे सिनात्रा में स्थापित करने की कोशिश कर रहा हूं, लेकिन मुझे लगता है कि यह एक सरल काम नहीं कर रहा है।Backbone.js विधि बनाने के लिए पैराटारा

मैं अपने मॉडल/संग्रह को सेट कर लेने के रूप में इतना:

var TEAM_ID = window.location.pathname.split('/')[1]; // From url 
$(function() { 
    var TeamMember = Backbone.Model.extend({ 
    defaults: { 
     name : "" 
    } 
    }); 

    var TeamMembers = Backbone.Collection.extend({ 
    model: TeamMember, 
    url: "/" + TEAM_ID + "/team-members.json" 
    }); 

    var teamMembers = new TeamMembers; 

    var TeamMemberView = Backbone.View.extend({ 
    events: { 
     "click #new-team-member-form .submit-button" : "handleNewTeamMember" 
    }, 
    handleNewTeamMember: function(data) { 
     var inputField = $('input[name=new_team_member_name]'); 
     console.log("Pre create"); 

     // This doesn't get sent to the server!! 
     var teamMember = teamMembers.create({name: inputField.val()); 

     console.log("Post create"); 

     return false; // Don't submit form 
    }, 
    render: function() { 
     console.log("Render team member"); 

     return this; 
    } 
    }); 

    // ... 

    var teamMemberView = new TeamMemberView({el: $('#week-view')}); 

}); 

एचटीएमएल लगता है:

<table id="week-view"> 
    <!-- ... --> 
    <form id="new-team-member-form" action="/some-add-url" method="post"> 
    <fieldset class="new-object-fieldset" title="New team member"> 
     <legend>New team member</legend> 
     <label for="new_team_member_name">Add new</label> 
     <input type="text" name="new_team_member_name" title="Add member" class="new-object-text-box" /> 
     <button type="submit" name="new_team_member" value="new_team_member" class="submit-button">+</button> 
     <div id="help-new"></div> 
    </fieldset> <!-- New team member --> 
    </form> 
    <!-- ... --> 

और गहरे लाल रंग का दिखाई देता है:

post '/:team_id/team-members.json' do 
    logger.info("Add team member (json): #{params}") 
end 

हालांकि, sinatra se teamMembers.create लाइन पर name पैरामीटर के बिना, रैवर केवल params[:team_id] दिखाता है। क्या मैं रीढ़ की हड्डी में कुछ बेवकूफ कर रहा हूँ? कुछ ठीक से शुरू नहीं कर रहा है?

मैं http://documentcloud.github.com/backbone/#Collection-create देखा है, http://documentcloud.github.com/backbone/docs/todos.html, http://liquidmedia.ca/blog/2011/01/backbone-js-part-1/, http://liquidmedia.ca/blog/2011/01/an-intro-to-backbone-js-part-2-controllers-and-views/ और https://gist.github.com/1655019, लेकिन मैं कोई जवाब मिल नहीं कर पा रहे। मुझे लगता है कि मैंने कुछ बेवकूफ किया है, लेकिन बस इसे नहीं देख सकता!

उत्तर

15

यह पता चला है, यह मुझे नहीं पता था कि जीनासन पैरामीटर को सही ढंग से कैसे निकालना है। इस साइट से: http://mini.softwareas.com/posting-json-to-a-sinatra-mongodb-service, मुझे पता चला मैं params हैश यानी के बजाय request.body.read.to_s का इस्तेमाल किया था,

post '/:team_id/team-members.json' do 
    request_body = JSON.parse(request.body.read.to_s) 
    team_member_name = request_body["name"] 
    # ... 
end 
4

मैं एक ही समस्या थी। मैं PHP पर हूं, हालांकि। चूंकि बैकबोन एक क्वेरी स्ट्रिंग में पोस्ट डेटा नहीं भेजता है, बल्कि एक सादा JSON स्ट्रिंग में, डेटा $_POST के माध्यम से उपलब्ध नहीं है। रीढ़ पोस्ट डेटा पढ़ने के लिए:

// the 'true' param returns an array rather than an object 
$post = json_decode(file_get_contents('php://input'), true); 

आप भी इसे सीधे $HTTP_RAW_POST_DATA से पढ़ सकते हैं।