2013-09-24 139 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

相关问题