я могу назвать один js файл от другого.

у меня есть asp.net mvc приложение, и я пытаюсь выгнать весь с квартиры свой JavaScript в js файлы. прямо сейчас у меня есть тот, названный sharedfunctions.js, который используется повсеместно.

проблема - то, что, если я перемещаю некоторый код в js файл, который называет метод в sharedfunctions.js файле, это больше, кажется, не работает.

что лучший способ состоит в том, чтобы смочь факторизовать общий код среди js файлов и позволить им на самом деле работать правильно?

5
задан alemjerus 9 March 2010 в 17:04
поделиться

5 ответов

До тех пор, пока на все .js-файлы будут даны ссылки на странице запроса, функции/переменные во всех них будут доступны любым другим после загрузки страницы .

Я выделяю этот последний бит, потому что он вполне может быть первопричиной ваших проблем. Возможно, порядок загрузки .js-файлов неправильный.

Если у Вас есть какой-то javascript, который выполняется немедленно (например, он не запускается при возникновении события страницы), то он вполне может начать выполняться до того, как Ваш файл sharefunctions.js попадет на страницу. В этом случае функция в файле sharedfunctions.js буквально не будет существовать во время выполнения другого javascript.

Посмотрите, можно ли посмотреть на порядок вещей для устранения этих проблем. Например, попробуйте убедиться, что ваш файл sharedfunctions.js загружается как первый файл скрипта на странице.

IMHO, это предпочтительнее, чем пытаться взломать существующие файлы js, чтобы загрузить содержимое других файлов js напрямую.

5
ответ дан 14 December 2019 в 19:15
поделиться

Some library solutions

Dojo: dojo.require("my.package.name");

jQuery: $.getScript("url/to/script. js", function() { /* callback */ });

0
ответ дан 14 December 2019 в 19:15
поделиться

Лучший способ получить все это в одном файле, а в вашей среде разработки, где это разбито на file-per-класс или какой бы метод вы ни использовали, просто включите их в правильном порядке.

Если вы хотите включить JS динамически (используя moo-tools short cuts, хотя вы можете просто использовать их библиотеку активов)

$$('head')[0].adopt(new Element('script',{'type':'text/javascript','src':'path to js file'}));
0
ответ дан 14 December 2019 в 19:15
поделиться

Используйте этот шаблон:

function IncludeJavaScript(jsFile)
{
  document.write('<script type="text/javascript" src="' + jsFile + '"></scr' + 'ipt>'); 
}
-1
ответ дан 14 December 2019 в 19:15
поделиться

Это зависит от того, что вы хотите. Если вы хотите быстрый класс, то данные должны быть защищены и использовать защищенные и общедоступные методы. Потому что я думаю, вы должны предположить, что ваши пользователи, которые получают из вашего класса, знают ваш класс достаточно хорошо или, по крайней мере, они прочитали ваше руководство по функции, которую они собираются переопределить.

Если ваши пользователи связываются с вашим классом, это не ваша проблема. Каждый злонамеренный пользователь может добавить следующие строки при переопределении одного из ваших виртуалов:

(C #)

static Random rnd=new Random();
//...
if (rnd.Next()%1000==0) throw new Exception("My base class sucks! HAHAHAHA! xD");
//...

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

Конечно, если вы хотите ограничить некоторые поля, то используйте функции или свойства метода доступа или что-то, что вы хотите, и сделать это поле частным, потому что нет другого решения...

Но я лично не люблю придерживаться принципов упа любой ценой. Особенно создание свойств с единственной целью сделать членов данных закрытыми.

(C #):

private _foo;
public foo
{
   get {return _foo;}
   set {_foo=value;}
}

Это было мое личное мнение.

Но делайте, что требует ваш босс (если он хочет частные поля, чем это.)

-121--2428073-

Значение переменной alphaChar присваивается на основе некоторого условия. Представьте себе сценарий, в котором переменная x содержит значение, отличное от 0 к 9. Предположим, что он содержит 10. Тогда ни одно из условий случая не будет удовлетворено x , поэтому alphaChar не будет присвоено никакого значения, в результате оно будет полностью неинициализировано. Поэтому при преобразовании alphaChar в строку оно преобразует некоторое значение мусора в строку и возвращает его вызывающему методу. Это причина, по которой вы получаете это сообщение.

Если вы хотите получить простое решение, то добавьте следующий код ниже

case 9: alphaChar = 'J'; 
        break; 

-

default: return null;

и проверьте вызывающие методы, возвращает ли эта функция alphaCoords null или нет, как это -

if(alphaCooord(10) == null)
{
    // x contains value other than 0 to 9
}
else
{
    // x contains value between 0 to 9, so the returned value will be the string
    // representation of the corresponding character
}

В этом пути ваш код не будет слишком сложным, или вам не нужно будет выбрасывать или обрабатывать любые исключения или что-то подобное.

Надеюсь, что это поможет:).

-121--3432995-

Вы считаете, что вы перезаписываете свои функции фальшивыми? В этом случае перед определением функции можно проверить, определена ли она уже.

if (тип yureFuncureName = = 'функция')

1
ответ дан 14 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: