2015-10-03 3 views
0

Я пытаюсь создать программу с помощью дротика, которая сохраняет контакты из html-файла.Локальное хранилище не работает - dart

Это мой код в дротике:

import 'dart:html'; 

void saveContact() { 
    Storage localStorage = window.localStorage; 

    var txtFirst = query("#firstname"); 
    String first = txtFirst.text; 
    var txtLast = query("#lastname"); 
    String last = txtLast.text; 
    var txtEmail = query("#email"); 
    String email = txtEmail.text; 
    var txtMobile = query("#mobile"); 
    String mobile = txtMobile.text; 
    var txtHome = query("#home"); 
    String home = txtHome.text; 
    var txtOffice = query("#office"); 
    String office = txtOffice.text; 

    var contact = { 
    "firstname" : first, 
    "lastname" : last, 
    "email" : email, 
    "mobile" : mobile, 
    "home" : home, 
    "office" : office 
    }; 

    localStorage.setItem(first + " " + last, JSON.stringify(contact)); 
    var test2 = JSON.parse(localStorage.getItem(first + " " + last)); 
    var result = query("#divContents"); 
    result.text = test2.tostring(); 
} 
void main() { 
    querySelector('#savecontacts').onClick.listen(saveContact); 
} 

Я хотел вывести контакт в одном из див просто чтобы увидеть, если код дротика работал. Но ничего не происходит ... Пожалуйста, помогите.

+0

я не использовал LocalStorage себе еще, https: //pub.dartlang. org/packages/lawndart может предоставить некоторые идеи, как использовать этот или этот вопрос http://stackoverflow.com/questions/12062593/how-do-i-save-a-value-from-a-text-input-box- and-load-it-later-in-dart/12062594 # 12062594 –

ответ

1

Это должно делать то, что вы хотите:

import 'dart:html'; 
import 'dart:convert' show JSON; 

void saveContact() { 
    Storage localStorage = window.localStorage; 
    // (... as InputElement) isn't actually necessary, 
    // it's just to silence the analyzer 
    var first = (querySelector("#firstname") as InputElement).value; 
    var last = (querySelector("#lastname") as InputElement).value; 
    var email = (querySelector("#email") as InputElement).value; 
    var mobile = (querySelector("#mobile") as InputElement).value; 
    var home = (querySelector("#home") as InputElement).value; 
    var office = (querySelector("#office") as InputElement).value; 

    var contact = { 
    "firstname" : first, 
    "lastname" : last, 
    "email" : email, 
    "mobile" : mobile, 
    "home" : home, 
    "office" : office 
    }; 

    localStorage['$first $last'] = JSON.encode(contact); 
    var test2 = JSON.decode(localStorage['$first $last']); 
    var result = querySelector("#divContents"); 
    result.text = test2.toString(); 
} 
void main() { 
    querySelector('#savecontacts').onClick.listen((_) { 
    saveContact(); 
    print('saved'); 
    }); 
} 

HTML Я использовал для этого примера

<!DOCTYPE html> 

<html> 
    <head> 
    </head> 
    <body> 

    <script type="application/dart" src="index.dart"></script> 
    <!-- for this next line to work, your pubspec.yaml file must have a dependency on 'browser' --> 
    <script src="packages/browser/dart.js"></script> 

    <input id="firstname"> 
    <input id="lastname"> 
    <input id="email"> 
    <input id="mobile"> 
    <input id="home"> 
    <input id="office"> 
    <button id="savecontacts">save</button> 
    <div> 
     <b>result</b> 
     <div id="divContents"></div> 
    </div> 

    </body> 
</html> 
+0

Спасибо, Гюнтер, но я попробовал, и выхода еще не было. Должен ли я что-нибудь установить? (Я имею в виду, кроме Dart SDK и WebStorm) –

+0

Нет, этого должно быть достаточно. Я думаю, проблема в вашем HTML. Возможно, отсутствующий или неправильный тег скрипта Dart. Я могу опубликовать свой пример, но только через несколько часов. Я не на своем компьютере. Тем временем вы можете добавить еще несколько операторов печати, чтобы выяснить, выполняется ли код вообще, и если он делает то, что вы ожидаете. –

+0

Я обманул свой ответ. –

Смежные вопросы