問題タブ [javascript-namespaces]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
149 参照

javascript - チタン名前空間(ネストされた名前空間へのアクセス機能の防止)

私のプロジェクトはこれとほぼ同じように定義されています:https ://github.com/krawaller/Struct/tree/master/Resources

しかし、私が抱えている問題は、Sから任意の深さのオブジェクトにアクセスできることです。たとえば、S.uiフォームapp.jsなどにアクセスできます。これを防ぐことはできますか?

モジュールパターンを明らかにしてみましたが、Ti.includeのおかげで、オブジェクトをグローバルに見ることができます...

関数スコープ内でTi.includeを実行した場合、ロード/インクルードされたオブジェクトはこの関数スコープにバインドされますか?

この問題に関するサンプル/例はありますか?

0 投票する
2 に答える
213 参照

jquery - jQuery 制限グローバル名前空間

現在、すべての JavaScript 関数を 1 つの関数にまとめているため、グローバル名前空間を汚染することはありません。

例えば

ここで jQuery を使用したいので、これを次のようにラップします。

jQuery 関数で var App = function () {} をラップしようとしましたが、App で AJAX 設定プロパティを使用すると問題が発生します。何か案は?

0 投票する
3 に答える
2970 参照

javascript - 同じ名前の別のオブジェクトを上書きせずに空の名前空間オブジェクトを作成するにはどうすればよいですか?

Yahoo YUI ブログで提案されている Module Pattern について、できる限り勉強してきました。

YUI には、同じ名前の既存の名前空間オブジェクトを次のように上書きすることなく、新しい空の名前空間オブジェクトを作成する機能があることに気付きました。

YAHOO.namespace("myProject");

次に、これを呼び出して使用できますYAHOO.myProject

(注意:YAHOO.myProject既に存在する場合は上書きされません)

プレーンな JavaScript を使用して、YUI を使用せずに同様の効果を得るにはどうすればよいですか?

できるだけ詳しく説明してください。

これが行われている完全な YUI ブログ記事は、ここにあります。

JavaScript の知識とスキルを学び、強化しているので、私自身の個人的な JavaScript ライブラリを作成しようとしています (使用する必要がない場合でも)。

0 投票する
1 に答える
463 参照

javascript - Rails 3.2のベストプラクティス:JavaScript関数をウィンドウオブジェクトにアタッチしますか?

多くのビューがjavascriptでレンダリングされる(つまり、リモートアクションからレンダリングされる)Railsアプリケーションがあります。railsが私のコーヒースクリプトファイルをjavascriptにコンパイルした後、名前空間が分離されているため、これらのビューは、関数をウィンドウオブジェクトにアタッチしない限り、javascript関数を参照できないことがわかりました。例えば

これは私がやってきたことですが、ウィンドウオブジェクトに事実上均等な関数をアタッチするのは正しくないようです。これを回避するより良い方法はありますか?

0 投票する
2 に答える
1121 参照

javascript - Detect when list of scripts are all loaded in javascript (Using namespaces).

I have made a namespaces framework for javascript. I am loading some plugins (.js files) which are dynamically added to the HTML.

I am going to try to simplify the code.

This function is used to dinamically load a JS. The callback function is called after .js file has been loaded. Consider that the following code has already been run.

I have a init function that loads the plugins contained in MYNAMESPACE.plugins as follows:

In my HTML I have the following script tag:

And I want to change it for something like this:

But I don't know how to modify the function MYNAMESPACE.init() so it executes the callback after ALL the plugin scripts are loaded.

Any ideas? Maybe using closures.

0 投票する
2 に答える
1501 参照

javascript - OOP、名前空間のトップレベルメソッド内のプライベート関数

名前空間を宣言するjsスクリプトがあり、次のrun()ようなXULスクリプト内から呼び出すことができるメソッドがありmyNamespace.run()ます。

の別のトップレベル関数として宣言する必要なしに、getSelText()内部を呼び出すことができるようにしたいと思います。代わりに、内部のプライベートメソッドのようにする必要があります。myNamespace.run()getSelText()myNamespacemyNamespace.run()

このスクリプトを実行すると、エラーが発生します。

getSelText関数ではありません。

私はJavaScriptにかなり慣れていないので、これを設計する最良の方法がわかりません。私が試みていることを達成することは可能ですか?私はこれを間違った方法で行っていますか?

助けに感謝します!

0 投票する
2 に答える
4259 参照

javascript - javascript名前空間を複数のファイルにまたがる方法は?

私は永遠にjavascriptを無視してきました。私は数年前にjQueryを使い始めたので、うまくいくことができました。しかし、私はTDDをもっとやり始めたので、昨日、本当にjavascriptに飛び込むことに決めました(その後、おそらくコーヒースクリプトも)。

私の ASP.NET Web フォーム アプリケーションには多くのページがあり、現在、それらのページのほとんどには大量の JavaScript がありません。私はそれを変更している最中です。テストを作成するために Jasmine と Chutzpah を使用しています。

期待どおりにテストが成功したり失敗したりしながら、私は動いていました。しかし、グローバル空間全体を踏みにじらないように、名前空間を作成したいと考えました。

この記事を読んだ後: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/

この記事の自己実行匿名関数: パート 2 (パブリックとプライベート) セクションのパターンを試して使用することにしました。最も柔軟性があり、物事を非常にうまくカプセル化しているように見えます。

/Scripts というフォルダーがあります。そのフォルダーの下には、jQuery、jasmine、(twitter) ブートストラップ、modernizr など、私が使用しているフレームワークがいくつかあります。/Site というサブフォルダーもあり、サイトのコードをページに基づいて複数のファイルに配置しています。(product.js、billing.js など)

/Scripts/Site の下に、ファイル (product_test.js、billing_tests.js など) を含む /Tests (または Specs) にサブフォルダーを追加しました。

名前空間がなくても、すべて問題ありません。padLeftヘルパー関数で作成した utility.js ファイルがあります。次に、そのグローバル padLeft を別の .js ファイルで使用しました。私のテストはすべてうまくいき、私は幸せでした。次に、名前空間を把握することにし、Scripts/Site/utility.js を次のように変更しました。

次に、 Scripts/Site/Tests/utility_test.js に

この非常に単純なテストでは、myns.something が「something」という文字列値で返されることを期待していました。

そうではありません。undefinedが返されます。

では、複数のファイルで javascript 名前空間を使用するにはどうすればよいですか?

長い導入で申し訳ありませんが、私がこのようにする理由を説明するのに役立つかもしれないと考えました. また、このセットアップが完全に間違っているか、部分的に間違っているかなどについてのアイデアを聞くことができるので、これらすべてを入れました。

この質問を読んでくれてありがとう。

更新: 解決済み ご協力いただきありがとうございます。最も助けになったのは、コメント投稿者の @TJ Crowder です。私は jsbin ツールが存在することを知りませんでした。上記のコードがツールに挿入され、結果が正しいことを確信した後、自分の環境で何かがおかしいことに気づきました。

受け入れられた回答のリンクも私を大いに助けてくれました。構文とロジックが一貫して機能していることを確認した後、自分のセットアップの何が問題なのかを判断する必要がありました。jQueryを渡したのは私だったと言うのは恥ずかしいですが、これを機能させようとしていたテストハーネスでは、実際にはjQueryを使用していませんでした。これは、モジュールが実際にはロードされていないことを意味していました。したがって、myns は設定されませんでした。

みんな、ありがとう。うまくいけば、これは将来誰かに役立つかもしれません。上記を使用する場合は、必ず jQuery オブジェクトを含めてください。もう 1 つのオプションは、jQuery を渡さず、param リストから $ を削除することです。

0 投票する
1 に答える
1597 参照

javascript - ある .js ファイルの関数を別の .js ファイルから呼び出すときの名前空間の問題

多くの画像のスワイプ可能なスライドショーを作成しようとして、Swipe.jslazyloader.jsの 2 つのプラグインをつなぎ合わせようとしています。Swipe プラグインのスライドショー タイマー イベントで、Lazyloader 内の update 関数を呼び出したいと考えています。調査の結果、私の問題は namespace の 1 つに見えるようです。つまり、Swipe は Lazyloader 内のものを認識していないため、関数を呼び出すことができません。

  1. 次のコードが与えられた場合、私は自分の問題を正しく理解していますか?
  2. もしそうなら、どうすれば Swipe に Lazyloader の機能にアクセスさせることができますか?

ありがとうございました。

フォローアップ: Cheeso との Q&A の後、最終的に何が必要かについて、私が間違った質問をしていたことに気付きました。私の悪い質問のために将来の読者が混乱するのを避けるために、このコメントを追加します. これは、名前空間に関するものでも、プライベート関数へのアクセスに関するものでもありません。これは行うべきではありません。このスレッドは、自分が何をしているのか本当にわからない場合に、フランケンシュタイン ライブラリを一緒に試すことがいかにお勧めできないかについての最終的なスレッドです。; ) フォローアップを終了

swipe.js のコールバック:

HTML内で呼び出されるスクリプト:

jquery.lazyloader.js:

0 投票する
1 に答える
1064 参照

backbone.js - backbone.jsモデルはルーターへの共同構築者ではありません

バックボーン.jsの名前空間アプリのデモに問題があります。ローカルに保存されている要素の簡単なリストを表示しようとしています。アプリを呼び出すと、コンソールがこのエラーを取得します。

コードの一部はルーターセクションにあります。

上記のパーティションコードの5行目にエラーが発生しました。

これは名前空間ファイルapp.jsです:

これはモジュールファイルです:

0 投票する
3 に答える
959 参照

javascript - 名前空間パターンにより、JSLint '関数が定義される前に使用されました' エラーが発生する

次の名前空間パターンを使用しています。

JSLint は、bar定義される前に使用されていると文句を言います。ただし、 afterが宣言さfooれるまで呼び出されません。barコードは、私が試したすべてのブラウザーで正常に動作します: http://jsfiddle.net/jDKvz/

パターンは、JavaScript で名前空間を宣言するにはどうすればよいですか?ごとです。、2番目の答え。

ここで何かを修正する必要がありますか、それとも JSLint を無視する必要がありますか?