2013-04-08 3 views
0

Я написал файл JavaScript с именем global.js, который имеет следующее содержание:Объект не определен или нулевой

; 

var Globals = 
{ 
    function getAppRoot() { 
     if (typeof (jQuery) !== "undefined") 
      return $("#ApplicationRoot").attr("href"); 
    }; 

    appRoot : getAppRoot(); 
}; 

Тогда в моем HTML-файл (ASP.NET MVC проекта), я включил мой JavaScript файл, как так :

<link rel = "home" id = "ApplicationRoot" 
    href = "@Url.Content("~/")" /> 

<script src = "@Url.Content("~/Scripts/jquery-1.8.3.js")" 
    type="text/javascript"></script> 

<script src = "@Url.Content("~/Scripts/global.js")" 
    type = "text/javascript"></script> 

А потом, в HTML-файл, внутри тега SCRIPT, я пишу:

$(document).ready( 
    function() { 
     alert("Globals.appRoot = " + window.Globals.appRoot); 
    }); 

Однако, когда я г un code, он сообщает мне, что Globals не определено.

ОБНОВЛЕНИЕ Спасибо, все. Я только заметил, что я забыл знак равенства (оператор присваивания) для одного.

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

var foo = { /* cannot have anything that does not adhere to the bar : gar syntax? */ } 

ДРУГОЙ UPDATE Вещь : если я сделал appRoot метод, при этом:

var Globals = 
{ 
    appRoot : function() { } 
}; 

или вот так:

var Globals = 
{ 
    appRoot : function getAppRoot() { } 
} 

Клиент должен будет вызвать appRoot с набором следующих скобок. Я бы хотел, чтобы для appRoot было свойство вместо метода. Как мне это сделать?

FINAL UPDATE теперь я изменил свой код следующим образом:

// globals.js 
// I understand that the starting semi-colon is not 
// required. I'd left it in for reasons that it is used 
var Globals = 
{ 
    appRoot : $("#ApplicationRoot").attr("href"); 
}; 


// inside the HTML file in $(document).ready(); 

if (tyepof(Globals) == "undefined" || Globals == null) 
    alert("Globals is either undefined or null"); 
else 
    alert("Globals.appRoot = " + Globals.appRoot); 

Я получаю предупредительное сообщение Глобалы является либо неопределенным или нулевым.

ANSWER ОК, наконец. Спасибо за вашу помощь. У меня была еще одна незначительная синтаксическая ошибка в объявлении объекта/инициализации объекта Globals.

С appRoot был членом объекта, и я использовал синтаксис инициализатора объекта, я не должен был прервать объявление appRoot с точкой с запятой. Вместо этого я должен был либо использовать запятую, либо просто оставить ее без какого-либо завершающего символа, так как это был последний (и единственный член Globals).

+2

не очень похожи на JavaScript. –

+4

В коде есть несколько синтаксических ошибок.Если вы посмотрите на консоль JavaScript в своем браузере (если у вас ее нет, используйте более современный браузер :-)), вы увидите различные сообщения, указывающие на ошибки. * Редактировать: даже по вашему праву сейчас. * –

+0

* «' var foo = {/ * не может иметь ничего, что не прилипает к бару: синтаксис gar? * /} '" * Исправить. Он называется инициализатором * объекта * (иногда «объектным литералом»), подробнее в [spec] (http://www.ecma-international.org/ecma-262/5.1/#sec-11.1.5). –

ответ

2

global.js Ваш должен выглядеть следующим образом:

//; << not needed 
var Globals = /*equal to missing*/ 
{ 
    appRoot : function getAppRoot() { 
     if (typeof (jQuery) !== "undefined") 
      return $("#ApplicationRoot").attr("href"); 
    } 
}; 
3

Вам нужно повторно написать свой globals.js, что-то, как это должно работать:

var Globals = { 
    appRoot : function() { 
     if (typeof (jQuery) !== "undefined") { 
      return $("#ApplicationRoot").attr("href"); 
     } 
    } 
}; 
Смежные вопросы