我使用ionic创建了一个应用程序:
ionic start MyFirstApp blank
cd MyFirstApp
ionic serve
ionic platform add android
ionic build android
ionic emulate android
Run Code Online (Sandbox Code Playgroud)
除了模拟器步骤外,一切都很成功.模拟器启动,但我得到"不幸的是,MyFirstApp已停止".一切都是全新的直接开箱即用,代码没有变化.
接下来是什么?我如何调试出错的地方?
编辑
这是我打电话时显示的输出ionic build android:
C:\Users\Colin\Documents\Ionic\MyFirstApp>ionic build android
add to body class: platform-android
Running command: C:\Users\Colin\Documents\Ionic\MyFirstApp\platforms\android\cordova\build.bat
Buildfile: C:\Users\Colin\Documents\Ionic\MyFirstApp\platforms\android\build.xml
-set-mode-check:
-set-debug-files:
-check-env:
[checkenv] Android SDK Tools Revision 23.0.2
[checkenv] Installed at C:\Program Files\Eclipse\adt-bundle-windows-x86_64-20140702\sdk
-setup:
[echo] Project Name: MyFirstApp
[gettype] Project Type: Application
-set-debug-mode:
-debug-obfuscation-check:
-pre-build:
-build-setup:
[getbuildtools] Using latest Build Tools: 20.0.0
[echo] Resolving Build Target for MyFirstApp...
[gettarget] …Run Code Online (Sandbox Code Playgroud) 我使用.NET创建了一个数据访问层.在我更新数据库记录的每个地方,我都使用了sql
UPDATE Customer SET FirstName =:FirstName,LastName =:LastName,Address1 =:Address1,Address2 =:Address2,.... etc
这意味着记录中的每个字段都会更新,即使只有一个字段可能已更改.一位同事已经对此提出异议,说我们应该只更新一个字段,如果它已经改变,引用带宽作为问题 - 比如我们有160个字段,然后我们传递160个字段的数据.我想我可以节省Web服务器和数据库服务器之间的带宽,如果我检查一个值是否已经改变,并且纯粹基于实际更改的值生成sql.
在Web服务器和客户端之间,我现在需要传递旧值和新值,所以我可能会在那里增加带宽(但是无论如何ASP.NET已经做到了这一点,我不确定我们是否可以关闭这一点以便这样做可能不是问题).
那么最佳做法是什么?我是否应该担心更新数据库记录中的所有字段?我如何仅更新已更改的字段?
编辑添加10月29日:有谁知道NHibernate的作用?也许这是投入时间学习如何以这种方式去做的一个论点.
我们有一个链接到TextBox的AutoCompleteExtender.两个控件都放在UpdatePanel中,UpdatePanel显示为使用Javascript库(Ext.BasicDialog)的弹出对话框.
弹出窗口是页面上的div,而不是单独的窗口.问题是当用户在弹出窗口内滚动时,AutoCompleteExtender会在错误的位置显示其菜单.看起来它是从弹出窗口顶部看可见距离并从弹出窗口的内部html顶部定位菜单(这是不可见的)
我们正在使用AjaxControlToolkit的1.0.20229.20821版本,我们的目标是ASP.NET Framework vewrsion 2.0.
我试图通过将以下Javascript附加到OnClientShown事件来修复菜单,但它几乎做同样的事情:
function resetPosition(object, args) {
var tb = object._element; // tb is the associated textbox.
var offset = $('#' + tb.id).offset();
var ex = object._completionListElement;
if (ex) {
$('#' + ex.id).offset(offset);
}
}
Run Code Online (Sandbox Code Playgroud) 我想在用户选择DropDownList中的项目时显示确认对话框.如果用户按"取消",我想停止回发.这是我添加到onchange事件的函数:
function imitateConfirmUnload(event) {
if (window.onbeforeunload = null)
return true;
return confirm("Are you sure you want to navigate away from this page?\n\nYou have unsaved changes\n\nPress OK to continue or Cancel to stay on the current page.");
}
Run Code Online (Sandbox Code Playgroud)
这是我的启动脚本中的相关代码,用于将处理程序添加到事件中:
function addConfirmToWarnClasses() {
$('.warn').change(function() {
imitateConfirmUnload()
});
}
Run Code Online (Sandbox Code Playgroud)
问题是即使用户选择"取消",也会发生回发.如果我将处理程序移动到click事件,它就可以工作.但它对我来说很笨拙.
编辑
更正:它不起作用,因为对话框阻止选择,因此当用户选择"确定"时,没有发生任何更改,并且在您需要时不会回发!
编辑2
DropDownList位于UpdatePanel内部,因此可能会影响行为.
在SQL Server中我已经把一个聚集索引上着眼于消除了低效率的连接使用LIKE语句:
CREATE VIEW KeywordCount WITH SCHEMABINDING
AS
SELECT
K.ID AS KeywordID
,COUNT_BIG(*) AS KeywordCount
FROM dbo.Grants G
INNER JOIN dbo.GrantStatuses GS2 ON GS2.ID = G.StatusID AND GS2.Status NOT IN ('Pre-Submission', 'Awaiting Signatory Approval', 'Modifying', 'Closed')
INNER JOIN dbo.Keywords K
ON G.Keywords LIKE '%' + K.Word + '%' --It's one of the grant's keywords
OR G.Title LIKE '%' + K.Word + '%' --Word appears in the title
OR Replace(G.Title, '-', ' ') LIKE '%' …Run Code Online (Sandbox Code Playgroud) 这是我的方法。请注意,我将为泛型参数返回等效的可空类型R:
public static Nullable<R> GetValue<T, R>(this T a, Expression<Func<T, R>> expression)
where T : Attribute
where R : struct
{
if (a == null)
return null;
PropertyInfo p = GetProperty(expression);
if (p == null)
return null;
return (R)p.GetValue(a, null);
}
Run Code Online (Sandbox Code Playgroud)
我可以在调用中使用它来获取如下属性的值:
//I don't throw exceptions for invalid or missing calls
//because I want to chain the calls together:
int maximumLength4 = instance.GetProperty(x => x.ToString())
.GetAttribute<StringLengthAttribute>()
.GetValue(x => x.MaximumLength)
.GetValueOrDefault(50);
Run Code Online (Sandbox Code Playgroud)
我想对字符串使用相同的通用方法:
//I'd like to use the GetValue generic method …Run Code Online (Sandbox Code Playgroud) 我试图在Visual Studio 2015中使用Ripple来调试我的应用程序.我想查看本地存储,但是当我打开开发人员工具时,Chrome关闭,Javascript控制台显示以下错误:
文件'mdha:http://code.ionicframework.com/1.0.0-rc.5/js/ionic.bundle.min.js'的源地图'angular-sanitize.min.js.map' 不可能是由于错误'异常类型'引发了TypeScriptSourceMapReader.SourceMapReadFailedException'而从指定位置读取.源代码地图使用不受支持的格式源地图使用不受支持的格式源地图使用不受支持的格式
我该如何摆脱错误?
编辑
我使用File-> New Project-> Javascript-> Apache Cordova Apps-> Ionic Tabs App创建了一个新项目.我看到了一个对话框:
您的项目使用的TypeScript版本早于Visual Studio当前安装的版本.如果您尝试构建项目,可能会出错.您是否希望我们在项目文件中升级TypeScriptToolsVersion,以便您再次看不到此警告?
回答"否"以及我遇到的问题.回答"是"并且它没有.....所以我想我需要弄清楚如何让Visual Studio再次给我对话,或者弄清楚如何手动更改它....
编辑2 我试过这个:
<TypeScriptToolsVersion>1.4</TypeScriptToolsVersion>1.6还没有运气......
编辑3 我刚刚意识到,当我关闭浏览器窗口时,总是会显示关于源图"angular-sanitize.min.js.map"未被读取的消息,而不仅仅是当它崩溃时.所以这个消息可能对这个特定问题没什么帮助.
编辑4 我将我的应用程序复制到使用Ionic Tabs App创建的新工作项目中,我仍然遇到问题.可能是两个不同的根本原因.
google-chrome-devtools ripple cordova visual-studio-2015 ionic
我已将AngularJS-Toaster库添加到我的index.html:
<link href="lib/angularjs-toaster/toaster.min.css" rel="stylesheet" />
<script src="lib/angularjs-toaster/toaster.min.js"></script>
<toaster-container
toaster-options="{'position-class': 'toast-bottom-center'}">
</toaster-container>
Run Code Online (Sandbox Code Playgroud)
在我的角度应用程序中:
//app.js
(function () {
angular
.module('app', ['toaster','blocks.logger',/*etc*/]);
})();
//blocks/logger/logger.module.js
(function () {
angular.module('blocks.logger', ['toaster']);
})();
//blocks/logger/logger.js
(function () {
'use strict';
angular
.module('blocks.logger')
.factory('logger', logger);
logger.$inject = ['$log', 'toaster'];
function logger($log, toaster) {
var service = {
error: error,
info: info,
success: success,
warning: warning,
log: $log.log // straight to console;
};
return service;
function error(message, title, data) {
toaster.error({ title: title || 'Error', body: message, timeout: 6000 …Run Code Online (Sandbox Code Playgroud) 我们使用生成代码的实用程序.我想扩展它,并认为我可以在不返回代码生成器的情况下完成它.这是问题所在.
代码生成器给了我:
public abstract class BaseService
{
protected virtual SqlCommand CreateSelectCommand(string whereClause, Hashtable parameters, string orderClause, int maxRows);
protected DataSet Fill(SqlCommand command);
}
Run Code Online (Sandbox Code Playgroud)
然后它会生成许多实现此类的类.例如
public class ChildService : BaseService
{
protected override SqlCommand CreateSelectCommand(string whereClause, Hashtable parameters, string orderClause, int maxRows)
{
//implementation here
}
protected override SqlCommand CreateSelectCommand(string whereClause, Hashtable parameters, string orderClause, int maxRows)
{
//implementation here
}
public virtual DataSet Select(string whereClause, System.Collections.Hashtable parameters, string orderClause, int maxRows)
{
SqlCommand command = CreateSelectCommand(whereClause, parameters, orderClause, maxRows);
return …Run Code Online (Sandbox Code Playgroud) 我想从一个表中拉回结果,该表匹配指定值在另一个表中的所有指定值.我可以这样做:
SELECT * FROM Contacts
WHERE
EXISTS (SELECT 1 FROM dbo.ContactClassifications WHERE ContactID = Contacts.ID AND ClassificationID = '8C62E5DE-00FC-4994-8127-000B02E10DA5')
AND EXISTS (SELECT 1 FROM dbo.ContactClassifications WHERE ContactID = Contacts.ID AND ClassificationID = 'D2E90AA0-AC93-4406-AF93-0020009A34BA')
AND EXISTS etc...
Run Code Online (Sandbox Code Playgroud)
然而,当我达到约40个EXISTS条款时,这就会失败.错误消息是"查询处理器耗尽了内部资源,无法生成查询计划.这是一种罕见的事件,仅适用于引用大量表或分区的极其复杂的查询或查询.请简化查询".
所以我已经通过实体框架5设置了.我在数据库中有一个Customers表.获得给定邮政编码的客户最有效的方法是什么?例如94023?我有这个:
var customersOfLosAltos =
(myDbContext.CreateObjectSet<Customer>()).Where(c=>c.Zip == "94023");
Run Code Online (Sandbox Code Playgroud)
但是,直观地说,这似乎效率很低,因为据我所知,它基本上从数据源中检索所有客户,然后通过给定的zip过滤掉它.如果我只有几百个客户,那可能没问题,如果我有一百万客户怎么办?
有什么想法吗?谢谢.
我想在问卷的各个部分之间横向滑动.每个部分都有一个标题和一些已回答的问题.我想在问题上添加一个垂直滚动,但无法弄清楚如何让它工作.这是我的观点:
<ion-view title="{{vm.title}}">
<ion-slide-box show-pager="true" class="has-header">
<ion-slide ng-repeat="s in vm.sections">
<ion-item class="item-royal">
{{s.Heading}}
</ion-item>
<ion-scroll>
<div class="card" ng-repeat="q in s.Questions">
<div class="item item-divider">
{{q.Text}}
</div>
<div class="item">
{{q.Answer}}
</div>
</div>
</ion-scroll>
</ion-slide>
</ion-slide-box>
</ion-view>
Run Code Online (Sandbox Code Playgroud)