我正在将RequireJS集成到CMS中,因此我将其放在页面模板的底部:
<html>
<body>
{Placeholder1}
<script src="scripts/require.js" data-main="scripts/main"></script>
{Placeholder2}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后在每个页面上,我想创建一个利用RequireJS的函数.所以我尝试将它放在页面的底部:
<html>
<body>
<h1>Home</h1>
<div class="slider">Slider content</div>
<script src="scripts/require.js" data-main="scripts/main"></script>
<script type="text/javascript">
require([
'jquery',
'utils',
'slider'
], function ($, utils, slider) {
slider.start();
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但我在jquery,utils和slider js文件上获得404.好像它没有读我的main.js配置我:
require.config({
paths: {
jquery: 'libs/jquery-1.8.1.min',
utils: 'libs/utils',
slider: 'libs/jquery.slider.min'
},
shim: {
slider: ['jquery']
}
});
require([ 'utils' ], function (utils) {
utils.init();
});
Run Code Online (Sandbox Code Playgroud)
我尝试在页面头部加载RequireJS和main,但是这样得到了不一致的结果.有时jquery,utils和slider会及时加载,有时则不加载.就好像页面底部的内联"require"不知道页面上的主要RequireJS或依赖规则,但是我的断点在main.js中命中,所以我知道它正被调用.是因为main.js是异步加载的,但页面底部的内联"require"块是否在页面渲染中加载?我该如何解决这个问题?
我以前成功使用过RequireJS但没有使用CMS.我总是使用"define"并且总是异步调用模块,但是不必像这样调用RequireJS函数内联.有关正确方法的任何想法吗?
如果URL中没有提供任何操作,Web API似乎有一个内置的默认逻辑,可以使用HTTP Verb作为操作名称.例如,我有这条路线:
config.Routes.MapHttpRoute(
name: "DefaultApiController",
routeTemplate: "api/{controller}"
);
Run Code Online (Sandbox Code Playgroud)
以下是我的行动:
public IEnumerable<Conference> Get()
{
...
}
[ActionName("current")]
public IEnumerable<Conference> GetCurrent()
{
...
}
Run Code Online (Sandbox Code Playgroud)
当我使用GET动词转到〜/ Conferences时,它会转到"Get()"动作.如果使用POST动词,它将带您进入"发布([FromBody]会议值)"动作......等等.但是当你试图去〜/ Conferences/GetCurrent时会发生冲突(即使我的[ActionName("current")]在上面):
找到了与请求匹配的多个操作:System.Collections.Generic.IEnumerable
1[MyApp.Models.Conference] Get() on type MyApp.Api.ConferencesController System.Collections.Generic.IEnumerable1 [MyApp.Models.Conference]类型为MyApp.Api.ConferencesController的GetCurrent()
这意味着框架使用StartsWith而不是Equal来确定默认操作.在将动词与动作匹配时,它也会忽略ActionName属性.
我的问题是如何使框架的默认操作完全匹配动词,而不是使用StartsWith逻辑?GET动词应仅匹配Get()动作,而不是Get(),GetCurrent()GetPast()等(特别是当它忽略ActionName属性时).
编辑 为简单起见,我只展示了上面的一条路线.我认为如果我展示所有仍在选秀中的路线可能会有所帮助.我正在尝试获得一个完整的REST API,同时仍然有空间添加我自己的自定义操作:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApiControllerActionId",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { action = @"^[a-zA-Z]+$", id = @"^\d+$" } // action must start with character
);
config.Routes.MapHttpRoute(
name: "DefaultApiControllerActionName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: null,
constraints: …Run Code Online (Sandbox Code Playgroud) 我试图获取放置在表单操作中的实际字符串.问题是,当我这样做时,即使相对路径在HTML中,action属性也会解析为绝对路径.如何获取action属性中的实际字符串?
以下是我所指的示例:http: //jsfiddle.net/MSY4s/
我想创建一个Split扩展,允许我将任何字符串拆分为强类型列表.我有一个良好的开端,但由于我将在许多项目中重复使用它,我希望从社区获得输入(因此您可以将其添加到您自己的工具箱中;)来自这里的任何想法?
public static class Converters
{
public static IEnumerable<T> Split<T>(this string source, char delimiter)
{
var type = typeof(T);
//SPLIT TO INTEGER LIST
if (type == typeof(int))
{
return source.Split(delimiter).Select(n => int.Parse(n)) as IEnumerable<T>;
}
//SPLIT TO FLOAT LIST
if (type == typeof(float))
{
return source.Split(delimiter).Select(n => float.Parse(n)) as IEnumerable<T>;
}
//SPLIT TO DOUBLE LIST
if (type == typeof(double))
{
return source.Split(delimiter).Select(n => double.Parse(n)) as IEnumerable<T>;
}
//SPLIT TO DECIMAL LIST
if (type == typeof(decimal))
{
return source.Split(delimiter).Select(n => decimal.Parse(n)) …Run Code Online (Sandbox Code Playgroud) c# ×2
javascript ×2
.net ×1
asynchronous ×1
c#-4.0 ×1
dom ×1
forms ×1
jquery ×1
js-amd ×1
requirejs ×1