1
私のHTMLテンプレートを働いていないIDで要素を取得することが基本である:私は私のコントローラでこれを持ってエンバー構文は
<h1>Upload Photo</h1>
<form {{action "upload" on="submit"}}>
{{input type="file" id="image"}}
<button type="submit">Upload</button>
</form>
:
import Ember from 'ember';
export default Ember.Controller.extend({
firebaseApp: Ember.inject.service(),
actions: {
upload() {
console.log('Uploading photo from controller');
var storageRef = this.get('firebaseApp').storage().ref();
// var selectedFile = Ember.$('#image').files[0];
var selectedFile = document.getElementById('image').files[0];
console.log('selectedFile = ', selectedFile);
// var photoRef = storageRef.child('ember-mascot.png');
}
}
});
私は通常のjavascriptの方法を使用する場合:
をvar selectedFile = document.getElementById('image').files[0];
それは動作します、私はファイルのコンソールログを取得します。私が検索したファイルのエンバーの構文を使用している場合
しかし、私が使用している場合
TypeError: Cannot read property '0' of undefined
:
var selectedFile = Ember.$('#image').files[0];
を私はJavaScriptコンソールのエラーを取得する
var selectedFile = this.$('#image').files[0];
私はこれを取得しますエラー:
このstackoverflowの答えによると:
Getting element by ID in Ember
Ember.$()
またはthis.$()
は動作するはずですが、それは何らかの理由ではありません。
つまり、 'Ember。$()'と 'this。$()'はコンポ内でのみ使用できますそれ以外の場合、すべての場合に機能する唯一のオプションは 'document.getElementById()'です。 – Zhang
'Ember。$'は '$'と同じですが、 'this。$'は異なっています。これはコンポーネントの有効範囲を調べます。あなたのケースでは、あなたはそれが間違っているのですか?あなたはこの 'Emberのようにアクセスする必要があります。$( '#image')[0] .files [0]' – kumkanillam
ああ、ターゲットがidであっても、jQueryのセレクタは常に配列を返しますcssクラス(https://stackoverflow.com/questions/6979891/does-jquery-always-return-array)を参照してください。 – Zhang