2015-09-25 4 views
1

Я пытаюсь использовать scala.js, но я не могу понять некоторые вещи. Буду благодарен за помощь.Scala.js jQuery ajax call example

import org.scalajs.dom.raw.HTMLElement 
import org.scalajs.jquery.{jQuery => JQ, JQueryAjaxSettings, JQueryXHR} 

def tableEvents() = 
    JQ("td > a").click {() => 
    JQ.ajax(js.Dynamic.literal(
     `type` = "GET", 
     url = "/update", 
     data = "id="+({ (x: HTMLElement) => JQ(x).parent().prev().html() }: js.ThisFunction), 
     // Not working. How to get "this" element here? 
     // Can I use something like Map or Seq to send of many parameters? 
     dataType = "json", 
     success = { (data: js.Any, textStatus: String, jqXHR: JQueryXHR) => 
     // how to convert data: js.Any to Json ? 
     } 
    ).asInstanceOf[JQueryAjaxSettings]) 
    } 

Я пытаюсь повторить здесь уже рабочий код JavaScript:

function tableEvents() { 
    $("td > a").click(function() { 
    $.ajax({ 
     type: "GET", 
     url: "/update", 
     data: {id: $(this).parent().prev().html()}, 
     dataType: "json", 
     success: function(data) { 
     $("#id").html(data.id); 
     $("#name").val(data.name); 
     $("#score").val(data.score); 
     } 
    }) 
    }) 
} 

ответ

1

Здесь вы хотите параметр this передается лямбда данным на .click. Поэтому вам необходимо превратить эту лямбду в js.ThisFunction:

JQ("td > a").click({ (thiz: HTMLElement) => 
    // Now You can use thiz 
}: js.ThisFunction) 
+0

Это работает, спасибо. –

+0

Я получил json так: val json = JSON.parse (JSON.stringify (данные)). Нет ли более простого способа? –

+0

Я понятия не имею, о чем вы говорите/пытаетесь это сделать прямо сейчас. Во всяком случае, это, вероятно, стоит отдельного вопроса. – sjrd