2013-09-24 172 views
0

我想在OnChange事件上獲取JSON。並對現有的haml頁面進行更改。 我的目標是用json值填充另一個選擇字段。目前,我只是試圖打印一條json被提取的消息。但是我在html中沒有任何改變。將事件綁定到函數Coffeescript。 Backbone.js

在控制檯的網絡選項卡中,我看到正在創建URL請求,並返回304響應。我也可以在響應中看到json。

events: 
    "submit form" : "onSubmit" 
    "change [name=repository]" : "onChange" 

    onChange: (e) -> 
    e.preventDefault() 
    name = @$("[name=repository]").val() 
    localStorage['new_issue_last_repo'] = name 
    token = localStorage['oauth2_github']['accessToken'] 
    @model = new Assignees(name) 
    console.log 'Printttttt' 
    @model.fetch {headers : @token}, 
     success: (model) => 
     @$('.assignee').html("<span>Fetched assignees</span>") 
     error: => 
     @$('.assignee').html("<span>Failed to fetch assignees :(</span>") 

haml文件看起來像這樣。

.message 
.assignee 
%form 
    %section.repo-select 
    %select{name: 'repository'} 
     - for repository in @repositories.models 
     - full_name = repository.get('full_name') 
     - if localStorage['new_issue_last_repo'] == repository.get('full_name') 
      %option{value: full_name, selected: 'selected'}= repository.get('full_name') 
     - else 
      %option{value: full_name}= repository.get('full_name') 

一旦json被提取,我怎樣才能讓.assignee改變。另外我怎樣才能訪問json數據?

我有一個類似的功能,工作。我不知道我在onChange函數中做了什麼錯誤。

onSubmit: (e) -> 
    e.preventDefault() 
    name = @$("[name=repository]").val() 
    localStorage['new_issue_last_repo'] = name 
    repository = @repositories.find (r) -> r.get('full_name') == name 
    model = new IssueModel({ 
     body: @$("[name=body]").val() 
     title: @$("[name=title]").val() 
     assignee: @$("[name=assignee]").val() 
     milestone: @$("[name=milestone]").val() 
    }, {repository: repository}) 

    model.save {}, 
     success: (model) => 
     @badge = new Badge() 
     @badge.addIssues(1) 
     @$('.message').html("<span>Issue <a href=\"#{model.get("html_url")}\" target=\"_blank\">##{model.get('number')}</a> was created!</span>") 
     error: => 
     @$('.message').html("<span>Failed to create issue :(</span>") 
+0

@ muistooshort更新了問題。對於模糊的問題抱歉,我仍然試圖找出咖啡標記。 – shshank

回答

1

我不是HAML大,但這樣的:

%form 
    %section.repo-select 
    %select{name: 'repository'} 

應該成爲這個HTML:

<form> 
    <section class="repo-select"> 
     <select name="repository"> 
      <!-- ... --> 
     </select> 
    </section> 
</form> 

吧?這意味着沒有任何內容會與ID選擇器#repo-select相匹配,因此綁定到這些事件的處理程序onChange將永遠不會被調用。

如果你想從<select>變化的事件,那麼你會希望這樣的事情在你的events

'change [name=repository]' 

Backbone's View#delegateEventsjQuery's Selectors文件的詳細信息。

至於你的郵件去,我覺得你有點困惑的Model#save參數之間的區別:和Model#fetch參數

保存model.save([attributes], [options])

model.save([options])

save需要兩個參數與第二回調所以此工程:

model.save {}, 
    success: (model) => ... 
    error: => ... 

fetch只需要一個參數,回調應該是一個參數,所以這樣的:

@model.fetch {headers : @token}, 
    success: (model) => ... 
    error: => ... 

將不起作用,因爲fetch甚至不會看到successerror回調。你可以這樣說:

@model.fetch 
    headers: @token 
    success: (model) => ... 
    error: => ... 

得到所有三個參數到fetch

+0

是否這樣做,我實際上正在使用'change select',直到現在,因爲我只有一個select元素。謝謝(你的)信息。 onChange函數正在執行,我可以看到當我選擇某個東西時,對api的調用,但是現在仍然顯示消息。 – shshank

+0

什麼信息?你爲什麼期望它被顯示?顯示在哪裏? –

+0

成功和錯誤的獲取調用,我試圖在網頁頂部顯示一條消息。 (在.assignee類中) onSubmit下面的類似函數與.message類相同,它起作用。任何想法,我哪裏錯了? – shshank

相關問題